__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)
__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);
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);
void JobRunner::setClient(IClient* client)
{
+ IF_FAIL_VOID(client != __client);
+
__client = client;
if (__state)
using namespace ctx;
MethodCallHandler::MethodCallHandler(IClient* client) :
- __caller(client)
+ __caller(client),
+ __callbackEnabled(false)
{
}
} 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));
void MethodCallHandler::onDisconnected()
{
+ __getJobManager().disableLifecycleCallbacks(__caller);
}
JobManager& MethodCallHandler::__getJobManager()
throw jobId;
}
+ if (__callbackEnabled)
+ __getJobManager().enableLifecycleCallbacks(jobId, __caller);
+
_I("Added Job-%d", jobId);
methodCall.reply(g_variant_new("(i)", jobId));
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);
+}
void __jobFinished(IMethodCall& methodCall);
void __getJob(IMethodCall& methodCall);
void __getAllJob(IMethodCall& methodCall);
+ void __enableLifecycleCallbacks(IMethodCall& methodCall);
IClient* __caller;
+ bool __callbackEnabled;
};
}
"<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"
#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"