Support abnormal restart on setting
authorJoohyun Kim <joohyune.kim@samsung.com>
Fri, 2 Aug 2013 02:56:22 +0000 (11:56 +0900)
committerJoohyun Kim <joohyune.kim@samsung.com>
Fri, 2 Aug 2013 02:56:22 +0000 (11:56 +0900)
Change-Id: I72f6881b8f9e0b101ff19dee6eb28c62c071c363
Signed-off-by: Joohyun Kim <joohyune.kim@samsung.com>
src/system/FSys_SettingClientEx.cpp
src/system/FSys_SettingClientEx.h

index eae8503..96cb239 100644 (file)
@@ -23,6 +23,7 @@
 
 #include <FBaseBoolean.h>
 #include <FBaseSysLog.h>
+#include <FBaseRtThread.h>
 
 #include <FApp_AppInfo.h>
 #include <FIo_AppServiceIpcMessages.h>
@@ -201,7 +202,8 @@ _SettingClientEx::_SettingClientEx()
        unique_ptr<_SettingEvent> settingEvent(new(nothrow) _SettingEvent());
        unique_ptr<_SettingEvent> settingEventForInternal(new(nothrow) _SettingEvent());
 
-       r = __ipcClient.Construct(serviceId, this);
+       __pIpcClient = new (nothrow) _IpcClient();
+       r = __pIpcClient->Construct(serviceId, this);
        SysTryCatch(NID_SYS, r == E_SUCCESS, r = E_SYSTEM, r, "It is failed to construct IPC client.");
        r = __asyncEventList.Construct();
        SysTryCatch(NID_SYS, r == E_SUCCESS, r = E_SYSTEM, r, "It is failed to construct asyn event list.");
@@ -234,6 +236,35 @@ _SettingClientEx::~_SettingClientEx()
        }
 }
 
+void
+_SettingClientEx::OnIpcServerDisconnected(_IpcClient& client)
+{
+       result r = E_SUCCESS;
+       int count = 0;
+       int max = 10;
+       SysLog(NID_SYS, "Common-service is down.");
+       delete __pIpcClient;
+       __pIpcClient = new (nothrow) _IpcClient();
+
+       r = E_SYSTEM;
+       while(r != E_SUCCESS)
+       {
+               r = __pIpcClient->Construct(SETTING_SERVICE_ID, this);
+
+               if(count == max)
+               {
+                       break;
+               }
+               count ++;
+               Thread::Sleep(1000);
+       }
+       SysTryReturnVoidResult(NID_SYS, r == E_SUCCESS, r, "It is failed to establish connection to common-service.");
+
+       __subscribed = false;
+       __subscribedForInternal = false;
+       SubscribeEvent();
+}
+
 result 
 _SettingClientEx::ConvertCode(String code)
 {
@@ -467,12 +498,9 @@ _SettingClientEx::GetOnService(String commandId, String key, String& response)
        r = requestMessages.Add(requestKey);
        SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to add required key on request message.");
 
-       //unique_ptr<IoService_Request> pMsg(new (std::nothrow) IoService_Request(requestMessages, &responseMessages));
-
        IoService_Request message(requestMessages, &responseMessages);
 
-       //r = __ipcClient.SendRequest(*(pMsg.get()));
-       r = __ipcClient.SendRequest(message);
+       r = __pIpcClient->SendRequest(message);
        SysTryCatch(NID_SYS, r == E_SUCCESS, r = E_SYSTEM, r, "It is failed to send request by IPC [%s]", GetErrorMessage(r));
 
        pResult = (String*)responseMessages.GetAt(SETTING_SERVICE_IPC_MSG_RESULT);
@@ -517,7 +545,7 @@ _SettingClientEx::SetOnService(String commandId, String key, String value)
 
        IoService_Request message(requestMessages, &responseMessages);
 
-       r = __ipcClient.SendRequest(message);
+       r = __pIpcClient->SendRequest(message);
        SysTryCatch(NID_SYS, r == E_SUCCESS, r = E_SYSTEM, r, "It is failed to send request by IPC [%s]", GetErrorMessage(r));
 
        pResult = (String*)responseMessages.GetAt(SETTING_SERVICE_IPC_MSG_RESULT);
@@ -866,7 +894,7 @@ _SettingClientEx::SubscribeEvent(void)
 
                unique_ptr<IoService_Request> pMsg(new (std::nothrow) IoService_Request(requestMessages, &responseMessages));
 
-               r = __ipcClient.SendRequest(*(pMsg.get()));
+               r = __pIpcClient->SendRequest(*(pMsg.get()));
                SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to send request by IPC [%s]", GetErrorMessage(r));
 
                String* pResult = (String*)responseMessages.GetAt(SETTING_SERVICE_IPC_MSG_RESULT);
@@ -893,7 +921,7 @@ _SettingClientEx::SubscribeEvent(void)
 
                unique_ptr<IoService_Request> pMsg(new (std::nothrow) IoService_Request(requestMessages, &responseMessages));
 
-               r = __ipcClient.SendRequest(*(pMsg.get()));
+               r = __pIpcClient->SendRequest(*(pMsg.get()));
                SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to send request by IPC [%s]", GetErrorMessage(r));
 
                String* pResult = (String*)responseMessages.GetAt(SETTING_SERVICE_IPC_MSG_RESULT);
@@ -921,7 +949,7 @@ _SettingClientEx::SubscribeEvent(void)
 
                unique_ptr<IoService_Request> pMsg(new (std::nothrow) IoService_Request(requestMessages, &responseMessages));
 
-               r = __ipcClient.SendRequest(*(pMsg.get()));
+               r = __pIpcClient->SendRequest(*(pMsg.get()));
                SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to send request by IPC [%s]", GetErrorMessage(r));
 
                String* pResult = (String*)responseMessages.GetAt(SETTING_SERVICE_IPC_MSG_RESULT);
@@ -948,7 +976,7 @@ _SettingClientEx::SubscribeEvent(void)
 
                unique_ptr<IoService_Request> pMsg(new (std::nothrow) IoService_Request(requestMessages, &responseMessages));
 
-               r = __ipcClient.SendRequest(*(pMsg.get()));
+               r = __pIpcClient->SendRequest(*(pMsg.get()));
                SysTryReturnResult(NID_SYS, r == E_SUCCESS, E_SYSTEM, "It is failed to send request by IPC [%s]", GetErrorMessage(r));
 
                String* pResult = (String*)responseMessages.GetAt(SETTING_SERVICE_IPC_MSG_RESULT);
index d8e3efc..38bbfa2 100644 (file)
@@ -165,6 +165,7 @@ public:
        result ResetToFactoryDefault(void);
 
        void OnIpcResponseReceived(Tizen::Io::_IpcClient& client, const IPC::Message& message);
+       void OnIpcServerDisconnected(Tizen::Io::_IpcClient& client);
 
        static _SettingClientEx* GetInstance(void);
 
@@ -184,7 +185,7 @@ private:
        static void InitSettingClient(void);
 private:
        Tizen::Base::Collection::HashMap        __asyncEventList;
-       Tizen::Io::_IpcClient                   __ipcClient;
+       Tizen::Io::_IpcClient*                  __pIpcClient;
 
        bool                                    __subscribed;
        bool                                    __subscribedForInternal;
@@ -192,7 +193,7 @@ private:
 
        _SettingEvent*                          __pSettingEvent;
        _SettingEvent*                          __pSettingEventForInternal;
-       static _SettingClientEx*                        __pSettingClient;
+       static _SettingClientEx*                __pSettingClient;
 };
 
 } } // Tizen::System