make get_servers dbus call asynchronous mediaserver
authorLuc Yriarte <luc.yriarte@intel.com>
Tue, 30 Jul 2013 13:17:23 +0000 (15:17 +0200)
committerLuc Yriarte <luc.yriarte@intel.com>
Tue, 30 Jul 2013 13:17:23 +0000 (15:17 +0200)
src/MediaServer/JSMediaServerManager.cpp
src/MediaServer/MediaServerManager.cpp
src/MediaServer/MediaServerManager.h

index 9b8f19c..80f7818 100644 (file)
@@ -116,7 +116,7 @@ JSValueRef JSMediaServerManager::scanNetwork(JSContextRef context,
                        privateObject = new MediaServerManagerPrivObject( context, mediaservermanager);
                }
 
-       // FIXME use event handlers instead of callbacks
+       // TODO use event handlers instead of callbacks
 
                LoggerD("Validating arguments: " << argumentCount);
                ArgumentValidator validator(context, argumentCount, arguments);
index 8316a57..35ea830 100644 (file)
@@ -16,6 +16,50 @@ namespace MediaServer
 using namespace WrtDeviceApis::Commons;
 
 
+/*
+ * Callback for get servers on UPnPManager proxy
+ */
+static void getServersCallback(GObject *source_object, GAsyncResult *res,  gpointer user_data) {
+
+       GError* gerror = NULL;
+       ScanNetworkCB * callback = (ScanNetworkCB *) user_data;
+       LoggerD("Entered getServersCallback");
+
+       /* finish get servers on UPnPManager proxy */
+       gchar ** strTab;
+       if (upn_pmanager__call_get_servers_finish (
+                       callback->mgrProxy,                     /* proxy */
+                       &strTab,
+                       res,
+                       &gerror                                         /* error */
+       )) {
+               LoggerD("getServersCallback success");
+       } else {
+               LoggerD(gerror->message);
+               g_error_free(gerror);
+               return;
+       }
+
+       while (*strTab) {
+               LoggerD("mediaserver dbus path " << *strTab);
+               // Create MediaServer object with proxy path
+               std::string path = *strTab;
+               JSValueRef value = JSMediaServer::createJSObject(callback->context, path);
+               const JSValueRef arguments[1] = { value };
+               // Trigger callback
+               LoggerD("Triggering callback ");
+               JSObjectCallAsFunction(callback->context,
+                               callback->successCB,
+                               callback->thisObject,
+                               1,
+                               arguments,
+                               NULL);
+               LoggerD("done with mediaserver " << *strTab);
+               strTab++;
+       }
+}
+
+
 /**
        * MediaServerManager implementation
        */
@@ -55,34 +99,14 @@ void MediaServerManager::scanNetwork(ScanNetworkCB *callback)
                return;
        }
 
-       char ** strTab;
-       if (upn_pmanager__call_get_servers_sync(
+       callback->mgrProxy = proxy;
+       LoggerD("calling get servers");
+       upn_pmanager__call_get_servers(
                        proxy,          /* proxy */
-                       &strTab,        /* out_Servers */
                        NULL,           /* cancellable */
-                       &gerror         /* error */
-               )) {
-               LoggerD("get servers success");
-               while (*strTab) {
-                       LoggerD("mediaserver dbus path " << *strTab);
-                       // Create MediaServer object with proxy path
-                       std::string path = *strTab;
-                       JSValueRef value = JSMediaServer::createJSObject(callback->context, path);
-                       const JSValueRef arguments[1] = { value };
-                       // Trigger callback
-                       LoggerD("Triggering callback ");
-                       JSObjectCallAsFunction(callback->context,
-                                       callback->successCB,
-                                       callback->thisObject,
-                                       1,
-                                       arguments,
-                                       NULL);
-                       LoggerD("done with mediaserver " << *strTab);
-                       strTab++;
-               }
-       } else {
-               LoggerD("get servers error");
-       }
+                       getServersCallback,             /* callback */
+                       callback                                /* user_data */
+               );
 
 }
 
index 6b69de9..7f6742a 100644 (file)
@@ -19,6 +19,7 @@ namespace MediaServer {
 
 class ScanNetworkCB {
 public:
+       UPnPManager *mgrProxy;
        JSContextRef context;
        JSObjectRef object;
        JSObjectRef thisObject;
@@ -27,6 +28,7 @@ public:
 };
 
 
+
 class MediaServerManager: public WrtDeviceApis::Commons::EventRequestReceiver<EventMediaServerManagerPropertyChanged>
 {
 public: