Integrate ctx_sched_set_job_cb() with the server-side functionalities 71/139871/1
authorMu-Woong Lee <muwoong.lee@samsung.com>
Fri, 21 Jul 2017 01:54:40 +0000 (10:54 +0900)
committerMu-Woong Lee <muwoong.lee@samsung.com>
Fri, 21 Jul 2017 01:54:40 +0000 (10:54 +0900)
Change-Id: Idc084b09c8f2e9a3f8155720c522212c26ed2ff5
Signed-off-by: Mu-Woong Lee <muwoong.lee@samsung.com>
src/client/JobManagerProxy.cpp
src/server/JobManager.cpp
src/server/JobManager.h
src/server/JobRunner.cpp
src/server/MethodCallHandler.cpp
src/server/MethodCallHandler.h
src/shared/JobSchedulerTypesPrivate.h

index 4aab5a3452375a903f89d70f47ecf15b49beeb1b..4a52cdf32ee537aabee0496563d4906a170be522 100644 (file)
@@ -152,6 +152,9 @@ void JobManagerProxy::setJobCb(void (*startJobCb)(JobInfo*, bool, void*), void (
                __serviceProxy.subscribe(SIGNAL_STOP_JOB, this);
                __subscribing = true;
        }
+
+       int err = __serviceProxy.call(METHOD_ENABLE_CB, NULL);
+       PRINT_ERR(err);
 }
 
 void JobManagerProxy::onSignal(const std::string& signalName, GVariant* param)
index a83c50442b9d7e5cd5686a7a990f9bb6e3b2e0cf..be2e58537b1292652332b3df829bffe9c87644dd 100644 (file)
@@ -222,6 +222,32 @@ void JobManager::removeRunner(JobRunner* runner)
        __removeRunner(runner);
 }
 
+void JobManager::enableLifecycleCallbacks(int jobId, IClient* owner)
+{
+       JobRunner* jobRunner = __getRunner(owner->getName(), jobId);
+       IF_FAIL_VOID(jobRunner);
+
+       jobRunner->setClient(owner);
+}
+
+void JobManager::enableLifecycleCallbacks(IClient* owner)
+{
+       for (auto& runner : __jobRunners) {
+               if (runner->getOwner() == owner->getName()) {
+                       runner->setClient(owner);
+               }
+       }
+}
+
+void JobManager::disableLifecycleCallbacks(IClient* owner)
+{
+       for (auto& runner : __jobRunners) {
+               if (runner->getOwner() == owner->getName()) {
+                       runner->setClient(NULL);
+               }
+       }
+}
+
 JobInfo* JobManager::getJobInfo(int jobId, IClient* owner)
 {
        JobRunner* jobRunner = __getRunner(owner->getName(), jobId);
index 2d983c70107a1b8f690223596ba84fa15301a529..0245bd275fdaee151b6a4283660bb931b3e762ef 100644 (file)
@@ -42,6 +42,9 @@ namespace ctx {
                int removeJob(int jobId, IClient* owner);
                int jobFinished(int jobId, IClient* owner);
                void removeRunner(JobRunner* runner);
+               void enableLifecycleCallbacks(int jobId, IClient* owner);
+               void enableLifecycleCallbacks(IClient* owner);
+               void disableLifecycleCallbacks(IClient* owner);
 
                JobInfo* getJobInfo(int jobId, IClient* owner);
                std::vector<JobInfo*> getAllJobInfo(IClient* owner);
index 617c21414af801589de491a245948df9970af86c..7232535dda1a099d6978ed5a417600acad6c0101 100644 (file)
@@ -88,6 +88,8 @@ void JobRunner::setState(JobState* state)
 
 void JobRunner::setClient(IClient* client)
 {
+       IF_FAIL_VOID(client != __client);
+
        __client = client;
 
        if (__state)
index 77f3dd29c34ed2fef2e3b3173588e51d8bab4136..1edc8954e8d8d8ff9e457dc313d1e86c2338f997 100644 (file)
@@ -23,7 +23,8 @@
 using namespace ctx;
 
 MethodCallHandler::MethodCallHandler(IClient* client) :
-       __caller(client)
+       __caller(client),
+       __callbackEnabled(false)
 {
 }
 
@@ -57,6 +58,9 @@ void MethodCallHandler::onMethodCalled(IMethodCall* methodCall)
 
                } else if (methodCall->getMethodName() == METHOD_GET_ALL_JOB) {
                        __getAllJob(*methodCall);
+
+               } else if (methodCall->getMethodName() == METHOD_ENABLE_CB) {
+                       __enableLifecycleCallbacks(*methodCall);
                }
        } catch (const int error) {
                _W("Catch: %s", CTX_ERROR_STR(error));
@@ -68,6 +72,7 @@ void MethodCallHandler::onMethodCalled(IMethodCall* methodCall)
 
 void MethodCallHandler::onDisconnected()
 {
+       __getJobManager().disableLifecycleCallbacks(__caller);
 }
 
 JobManager& MethodCallHandler::__getJobManager()
@@ -117,6 +122,9 @@ void MethodCallHandler::__addJob(IMethodCall& methodCall)
                throw jobId;
        }
 
+       if (__callbackEnabled)
+               __getJobManager().enableLifecycleCallbacks(jobId, __caller);
+
        _I("Added Job-%d", jobId);
 
        methodCall.reply(g_variant_new("(i)", jobId));
@@ -207,3 +215,15 @@ void MethodCallHandler::__getAllJob(IMethodCall& methodCall)
 
        methodCall.reply(g_variant_new_tuple(&jobInfoArr, 1));
 }
+
+void MethodCallHandler::__enableLifecycleCallbacks(IMethodCall& methodCall)
+{
+       _I("Turning on the lifecycle callbacks");
+
+       if (!__callbackEnabled) {
+               __callbackEnabled = true;
+               __getJobManager().enableLifecycleCallbacks(__caller);
+       }
+
+       methodCall.reply(E_NONE);
+}
index 0912058517b0883d60766fa05c3e7a49bf2df422..4098745dc9a8a0f1def785a7c67382c0170e43aa 100644 (file)
@@ -44,8 +44,10 @@ namespace ctx {
                void __jobFinished(IMethodCall& methodCall);
                void __getJob(IMethodCall& methodCall);
                void __getAllJob(IMethodCall& methodCall);
+               void __enableLifecycleCallbacks(IMethodCall& methodCall);
 
                IClient* __caller;
+               bool __callbackEnabled;
        };
 
 }
index abfb34bfdd0519c30db176aeb683d96d32737a9e..299a3677d36d296b1bee712015392746f967a7fa 100644 (file)
@@ -48,6 +48,8 @@
        "<method name='" METHOD_IS_SUPPORTED"'>" \
        "       <arg type='i' name='type' direction='in'/>" \
        "       <arg type='s' name='uri' direction='in'/>" \
+       "</method>" \
+       "<method name='" METHOD_ENABLE_CB"'>" \
        "</method>"
 
 #define METHOD_ADD_JOB         "AddJob"
@@ -58,6 +60,8 @@
 #define METHOD_GET_JOB         "GetJob"
 #define METHOD_GET_ALL_JOB     "GetAllJob"
 #define METHOD_IS_SUPPORTED    "IsSupported"
+#define METHOD_ENABLE_CB       "EnableCb"
+
 #define SIGNAL_START_JOB       "JobStarted"
 #define SIGNAL_STOP_JOB                "JobToBeStopped"