Merge "Add Setting feature on system-server lib" into tizen_2.2
[platform/framework/native/appfw.git] / src / system / FSys_DeviceManagerMsgClient.cpp
1 //
2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
3 //
4 // Licensed under the Apache License, Version 2.0 (the License);
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
7 //
8 //     http://www.apache.org/licenses/LICENSE-2.0
9 //
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
15 //
16
17 /**
18  * @file                FSys_DeviceManagerMsgClient.cpp
19  * @brief               This is the implementation file for _DeviceManagerMsgClient class.
20  */
21
22 #include <FApp_AppInfo.h>
23 #include <FBaseSysLog.h>
24 #include <unistd.h>
25 #include <sys/types.h>
26 #include <FIo_AppServiceIpcMessages.h>
27 #include "FSys_DeviceManagerMsgClient.h"
28
29 using namespace Tizen::App;
30 using namespace Tizen::Base;
31 using namespace Tizen::Base::Collection;
32 using namespace Tizen::Io;
33
34 namespace Tizen { namespace System
35 {
36 static const wchar_t* _DEVICE_MANAGER_MESSAGE_IPC_ID = L"osp.sys.ipcserver.devicemanager";
37
38 _DeviceManagerMsgClient* _DeviceManagerMsgClient::__pDeviceManagerMsgClient = null;
39
40 _DeviceManagerMsgClient::_DeviceManagerMsgClient()
41         : __pIpcClient(null),
42         __pDeviceManagerMsgListener(null)
43 {
44         result r = E_SUCCESS;
45
46         __pIpcClient.reset(new (std::nothrow) _IpcClient());
47         SysTryReturn(NID_SYS, __pIpcClient != null, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] It is failed to create IPC client");
48
49         r = __pIpcClient->Construct(_DEVICE_MANAGER_MESSAGE_IPC_ID, this);
50
51         SysTryReturn(NID_SYS, r == E_SUCCESS, , r, "Propagated. [%s]", GetErrorMessage(r));
52         SetLastResult(r);
53 }
54
55 _DeviceManagerMsgClient::~_DeviceManagerMsgClient()
56 {
57 }
58
59 _DeviceManagerMsgClient*
60 _DeviceManagerMsgClient::GetInstance()
61 {
62         if(__pDeviceManagerMsgClient == null)
63         {
64                 __pDeviceManagerMsgClient = new (std::nothrow) _DeviceManagerMsgClient();
65                 SysTryReturn(NID_SYS, __pDeviceManagerMsgClient, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] It is not enough memory.");
66         }
67         return __pDeviceManagerMsgClient;
68 }
69
70 _IpcClient*
71 _DeviceManagerMsgClient::GetIpcClient()
72 {
73         return __pIpcClient.get();
74 }
75
76 result
77 _DeviceManagerMsgClient::RegisterListener(const String key, _ICommunicationDispatcherListener& listener)
78 {
79         SysLog(NID_SYS, "Enter.");
80         SysTryReturnResult(NID_SYS, !__pDeviceManagerMsgListener, E_OBJ_ALREADY_EXIST, "DeviceManager listener was set already.");
81         __pDeviceManagerMsgListener = &listener;
82         SysLog(NID_SYS, "Exit.");
83         return E_SUCCESS;
84 }
85
86 result
87 _DeviceManagerMsgClient::UnregisterListener(const String key)
88 {
89         SysTryReturnResult(NID_SYS, __pDeviceManagerMsgListener, E_OBJ_NOT_FOUND, "DeviceManager listener is not set.");
90         __pDeviceManagerMsgListener = null;
91         return E_SUCCESS;
92 }
93
94 void
95 _DeviceManagerMsgClient::OnIpcResponseReceived(_IpcClient& client, const IPC::Message& message)
96 {
97         SysLog(NID_SYS, "Enter.");
98         IPC_BEGIN_MESSAGE_MAP(_DeviceManagerMsgClient, message)
99                 IPC_MESSAGE_HANDLER_EX(IoService_Data, &client, OnDataReceived)
100         IPC_END_MESSAGE_MAP_EX()
101         SysLog(NID_SYS, "Exit.");
102 }
103
104 void
105 _DeviceManagerMsgClient::OnDataReceived(const ArrayList& data)
106 {
107         result r = E_SUCCESS;
108         String* pServiceId = (String*) data.GetAt(0);
109
110         SysTryReturnVoidResult(NID_SYS, pServiceId != null, E_SYSTEM, "There is no service id.");
111         SysLog(NID_SYS, "Service id = %ls", pServiceId->GetPointer());
112
113         SysTryReturnVoidResult(NID_SYS, __pDeviceManagerMsgListener, E_SYSTEM, "Service[%ls] is available, but listener does not exist. [%s]", pServiceId->GetPointer(), GetErrorMessage(r));
114
115         __pDeviceManagerMsgListener->OnDataReceived(data);
116
117         SysLog(NID_SYS, "Message is delivered to \"%ls\"[%x]", pServiceId->GetPointer(), __pDeviceManagerMsgListener);
118         ArrayList* temp = const_cast< ArrayList *> (&data);
119         temp->RemoveAll(true);
120 }
121
122 }}