lunes, 7 de febrero de 2011

TUTORIAL: Desarrollo de aplicaciones para bada (XVI)

El servidor bada
El servicio Content

Como hemos descrito anteriormente, la gestión de contenidos en bada se divide en dos categorías: gestión de contenidos locales y de gestión de contenidos remotos. En este post se explica como utilizar el gestor de contenidos remotos para subir y crear contenido en el servidor.


Paso 1: Implementar el formulario de acceso

Para poder utilizar el servicio de contenido, el usuario tiene que iniciar sesión en el servidor bada con una cuenta de bada válida. Esto requiere que la aplicación tenga un formulario de acceso (usuario y contraseña) al servicio de contenido. Este paso es muy sencillo, simplemente utiliza el control "Sign in":

AppControl* pAppControl = AppManager::FindAppControlN(APPCONTROL_SIGNIN, OPERATION_SIGNIN); 

if(pAppControl) 
   pAppControl->Start(null, pListener); 
   delete pAppControl; 
}

Este código generará automáticamente el formulario de acceso. Una vez el usuario haya accedido al servicio de contenido, ya puede usarlo. 

NOTA: el proceso de comprobación de credenciales en el acceso al servicio es necesario para algunos de los servicios de bada como Social, Location y Content.


Paso 2: Transferir el contenido al servidor

Ahora que el usuario ya ha accedido al servicio, está listo para transferir el contenido que desee al servidor. Para implementar esta función, tienes que usar la clase ContentTransfer proporcionada por bada. En primer lugar vamos a ver cómo implementar la interfaz IContentTransferListener que necesitas para comprobar los resultados desde el servidor:

class MyListener : 
public Osp::Content::IContentTransferListener 
   public: 
      MyListener(); 
      ~MyListener(); 

      virtual void OnContentDownloadCompleted(RequestId reqId,
         ContentId contenteId, result r, 
         const String &errorCode, const String &errorMsg);
      virtual void OnContentDownloadToBufferCompleted(RequestId
         reqId, ByteBuffer *pBuf, result r, 
         const String &errorCode, const String &errorMsg); 
      virtual void OnContentTransferCanceled(RequestId reqId,
         result r, const String &errorCode, 
         const String &errorMsg); 
      virtual void OnContentTransferProgress(RequestId reqId, 
         int totalTransferredSize); 
      virtual void OnContentUploadCompleted(RequestId reqId,
         result r, const String &errorCode, 
         const String &errorMsg); 
      virtual void OnContentDescriptorReceived(RequestId reqId,
         const DownloadDescriptor &descriptor); };

Cuando el servidor recibe el contenido completo, invocará al método OnContentUploadCompleted() para informar de los resultados al usuario final. También puedes comprobar el progreso de la transferencia de subida implementando el método OnContentTransferProgress de ejecución().

El siguiente fragmento de código muestra un ejemplo de implementación del método OnContentUploadCompleted():

void MyListener::OnContentUploadCompleted(RequestId reqId, result r, const String &errorCode, const String &errorMsg) 
   if(IsFailed(r)) 
   { 
      AppLog(“Content Upload failed! Reason (%s)”, errorMsg.GetPointer()); 
   } 
}

Para subir el contenido, simplemente llama al método Upload() desde la clase ContentTransfer.

pContentTransfer = new ContentTransfer(); pContentTransfer->Construct(myListener); 
//Defined in step 2 
Osp::Base::Utility::Uri uri; 
RequestId reqId; 
pContentTransfer->Upload(L”/Media/Images/sourceImg.jpg”, 
   L”/Image/destinationImg.jpg”, true, uri, reqId); 
//The four parameters indicate: serFilePath, destFilePath, replace the exisiting file, request id.

Una vez que el contenido es subido al servidor, tienes que crear el contenido en el servidor con su información (metadatos). Sin esta información de contenido remoto, el contenido no se crea. En el siguiente paso vamos a empezar a manipular el servidor remoto.

pRemoteContentInfo = new RemoteContentInfo(); 
Osp::Base::Utility::Uri uri; 
uri.SetPath(L”Image.jpg”); 
r = pRemoteContentInfo->Construct(L”Image”, uri, 123345); AppAssert(IsFailed(r)); 
r = pRemoteContentInfo->SetContentName(L”My photo”); AppAssert(IsFailed(r), “Set content name failed!”); 
r = pRemoteContentInfo->SetProvider(L”My name”); AppAssert(IsFailed(r), “Set content provider failed!”); 


Paso 3: Definir la información de contenido remoto

Para definir la información del contenido remoto, tienes que utilizar la clase RemoteContentInfo del namespace Osp::Content. 


Paso 4: Implementar RemoteContentManagerListener

class MyListener : public Osp::Content::IRemoteContentManager 
   public: 
      MyListener(); 
      ~MyListener(); 
      virtual void OnContentCreated(RequestId reqId, result r, 
         const String &errorCode, const String &errorMsg); 
      virtual void OnContentDeleted(RequestId reqId, result r, 
         const String &errorCode, const String &errorMsg); 
      virtual void OnContentInfoReceivedN(RequestId reqId, 
         RemoteContentInfo *pInfo, result r, 
         const String &errorCode, const String &errorMsg);
      virtual void OnContentStatusReceived(RequestId reqId, 
         RemoteContentStatus contentStatus, 
         const String &errorCode, const String &errorMsg); 
      virtual void OnContentUpdated(RequestId reqId, 
         result r, const String &errorCode, 
         const String &errorMsg); 
};
  
Como en otros servicios proporcionados por la plataforma bada, el desarrollador debe implementar el listener con el fin de recibir las respuestas enviadas por el servidor. El fragmento de código anterior muestra el archivo header implementado. Hay cinco métodos virtuales definidos en la interface IRemoteContentManagerListener. Tendrás que implementarlos de según tus propias necesidades. Por ejemplo, si quieres crear el contenido en el servidor, y también quieres saber si la solicitud de creación tiene éxito, entonces tienes que implementar el método OnContentCreated(). El siguiente fragmento de código da algunas ideas en bruto sobre como implementar el método OnContentCreated():

void MyListener::OnContentCreated(RequestsId reqId, result r, const String &errorCode, const String &errorMsg) 
   if(IsFailed(r)) 
   { 
      AppLog(“Failed to create content on server! Reason(%s)”, 
         errorMsg.GetPointer()); 
   } 
   else { AppLog(“Content Created successfully!”); } 
}


Paso 5: Crear el contenido

Para crear el contenido en el servidor remoto tienes que utilizar la clase RemoteContentManager:

MyListener* myListener; 
myListener = new MyListener(); 
RequestId reqId; 
pRemoteContentManager = new RemoteContentManager(); pRemotecontentManager->Construct(pMyListener); pRemoteContentManager->CreateContent(*pRemoteContentInfo, reqId);

El fragmento de código anterior muestra cómo crear el contenido en el servidor remoto. El parámetro pRemoteContentInfo es el que se define en el paso 3. Y la clase MyListener es la que hemos definido en el paso 4.



Vía: Introduction to bada - A developer's guide

No hay comentarios:

Publicar un comentario