2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
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
8 // http://www.apache.org/licenses/LICENSE-2.0
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.
18 * @file FSys_DeviceManagerMsgClient.cpp
19 * @brief This is the implementation file for _DeviceManagerMsgClient class.
22 #include <FApp_AppInfo.h>
23 #include <FBaseSysLog.h>
25 #include <sys/types.h>
26 #include <FIo_AppServiceIpcMessages.h>
27 #include "FSys_DeviceManagerMsgClient.h"
29 using namespace Tizen::App;
30 using namespace Tizen::Base;
31 using namespace Tizen::Base::Collection;
32 using namespace Tizen::Io;
34 namespace Tizen { namespace System
36 static const wchar_t* _DEVICE_MANAGER_MESSAGE_IPC_ID = L"osp.sys.ipcserver.devicemanager";
38 _DeviceManagerMsgClient* _DeviceManagerMsgClient::__pDeviceManagerMsgClient = null;
40 _DeviceManagerMsgClient::_DeviceManagerMsgClient()
42 __pDeviceManagerMsgListener(null)
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");
49 r = __pIpcClient->Construct(_DEVICE_MANAGER_MESSAGE_IPC_ID, this);
51 SysTryReturn(NID_SYS, r == E_SUCCESS, , r, "Propagated. [%s]", GetErrorMessage(r));
55 _DeviceManagerMsgClient::~_DeviceManagerMsgClient()
59 _DeviceManagerMsgClient*
60 _DeviceManagerMsgClient::GetInstance()
62 if(__pDeviceManagerMsgClient == null)
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.");
67 return __pDeviceManagerMsgClient;
71 _DeviceManagerMsgClient::GetIpcClient()
73 return __pIpcClient.get();
77 _DeviceManagerMsgClient::RegisterListener(const String key, _ICommunicationDispatcherListener& listener)
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.");
87 _DeviceManagerMsgClient::UnregisterListener(const String key)
89 SysTryReturnResult(NID_SYS, __pDeviceManagerMsgListener, E_OBJ_NOT_FOUND, "DeviceManager listener is not set.");
90 __pDeviceManagerMsgListener = null;
95 _DeviceManagerMsgClient::OnIpcResponseReceived(_IpcClient& client, const IPC::Message& message)
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.");
105 _DeviceManagerMsgClient::OnDataReceived(const ArrayList& data)
107 result r = E_SUCCESS;
108 String* pServiceId = (String*) data.GetAt(0);
110 SysTryReturnVoidResult(NID_SYS, pServiceId != null, E_SYSTEM, "There is no service id.");
111 SysLog(NID_SYS, "Service id = %ls", pServiceId->GetPointer());
113 SysTryReturnVoidResult(NID_SYS, __pDeviceManagerMsgListener, E_SYSTEM, "Service[%ls] is available, but listener does not exist. [%s]", pServiceId->GetPointer(), GetErrorMessage(r));
115 __pDeviceManagerMsgListener->OnDataReceived(data);
117 SysLog(NID_SYS, "Message is delivered to \"%ls\"[%x]", pServiceId->GetPointer(), __pDeviceManagerMsgListener);
118 ArrayList* temp = const_cast< ArrayList *> (&data);
119 temp->RemoveAll(true);