2 // Open Service Platform
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.apache.org/licenses/LICENSE-2.0
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
19 * @file FIo_ChannelServiceStub.cpp
20 * @brief This is the implementation file for the _ChannelServiceStub class.
29 #include <FBaseSysLog.h>
30 #include <FBaseRt_EventDispatcher.h>
31 #include "FIo_IpcServer.h"
32 #include "FIo_ChannelServiceStub.h"
33 #include "FIo_ChannelMessages.h"
34 #include "FIo_ChannelService.h"
36 using namespace Tizen::Base;
37 using namespace Tizen::Base::Collection;
38 using namespace Tizen::Base::Runtime;
39 using namespace Tizen::Io;
43 namespace Tizen { namespace Io
46 _ChannelServiceStub::_ChannelServiceStub(void)
48 , __pChannelService(null)
53 _ChannelServiceStub::~_ChannelServiceStub(void)
55 if (__pIpcServer != null)
63 _ChannelServiceStub::Construct(void)
65 SysAssertf(__pIpcServer == null, "Already constructed. Calling Construct() twice or more on a same instance is not allowed for this class.");
68 _IpcServer* pIpcServer = null;
70 pIpcServer = new (std::nothrow) _IpcServer;
71 SysTryReturnResult(NID_IO, pIpcServer != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
73 r = pIpcServer->Construct("osp.io.ipcserver.channelmanager", *this, false);
74 SysTryCatch(NID_IO, !IsFailed(r), , r, "[%s] Failed to create IPC server(ChannelService)", GetErrorMessage(r));
76 __pIpcServer = pIpcServer;
87 _ChannelServiceStub::SetChannelService(_ChannelService& service)
89 __pChannelService = &service;
93 _ChannelServiceStub::OnRegisterChannelMessage(const Tizen::Base::String& appId, int* pResult)
95 SysAssertf(__pChannelService != null, "Channel service has not been initialized.\n");
97 int clientId = __pIpcServer->GetClientId();
99 *pResult = __pChannelService->RegisterChannel(appId, clientId);
105 _ChannelServiceStub::OnSendRequestMessage(const String& src,
107 const ArrayList& args,
111 SysAssertf(__pChannelService != null, "Channel service has not been initialized.\n");
113 *pResult = __pChannelService->SendRequest(src, dest, args, requestId);
115 const_cast<ArrayList*>(&args)->RemoveAll(true);
121 _ChannelServiceStub::OnSendNullRequestMessage(const String& src,
126 SysAssertf(__pChannelService != null, "Channel service has not been initialized.\n");
128 *pResult = __pChannelService->SendNullRequest(src, dest, requestId);
134 _ChannelServiceStub::OnSendResponseMessage(const String& src,
136 const ArrayList& args,
140 SysAssertf(__pChannelService != null, "Channel service has not been initialized.\n");
142 *pResult = __pChannelService->SendResponse(src, dest, args, requestId);
144 const_cast<ArrayList*>(&args)->RemoveAll(true);
150 _ChannelServiceStub::OnSendNullResponseMessage(const String& src,
155 SysAssertf(__pChannelService != null, "Channel service has not been initialized.\n");
157 *pResult = __pChannelService->SendNullResponse(src, dest, requestId);
163 _ChannelServiceStub::SendRequest(int clientId, const String& src, const String& dest, const ArrayList& args, int requestId)
165 SysAssertf(__pIpcServer != null, "Not yet constructed. Construct() should be called before use.\n");
167 return __pIpcServer->SendResponse(clientId, new ChannelServiceMsg_sendRequestAsync(src, dest, args, requestId));
171 _ChannelServiceStub::SendNullRequest(int clientId, const String& src, const String& dest, int requestId)
173 SysAssertf(__pIpcServer != null, "Not yet constructed. Construct() should be called before use.\n");
175 return __pIpcServer->SendResponse(clientId, new ChannelServiceMsg_sendNullRequestAsync(src, dest, requestId));
179 _ChannelServiceStub::SendResponse(int clientId, const String& src, const String& dest, const ArrayList& args, int requestId)
181 SysAssertf(__pIpcServer != null, "Not yet constructed. Construct() should be called before use.\n");
183 return __pIpcServer->SendResponse(clientId, new ChannelServiceMsg_sendResponseAsync(src, dest, args, requestId));
187 _ChannelServiceStub::SendNullResponse(int clientId, const String& src, const String& dest, int requestId)
189 SysAssertf(__pIpcServer != null, "Not yet constructed. Construct() should be called before use.\n");
191 return __pIpcServer->SendResponse(clientId, new ChannelServiceMsg_sendNullResponseAsync(src, dest, requestId));
195 _ChannelServiceStub::OnIpcRequestReceived(_IpcServer& server, const IPC::Message& message)
197 IPC_BEGIN_MESSAGE_MAP(_ChannelServiceStub, message)
198 IPC_MESSAGE_HANDLER_EX(ChannelServiceMsg_register, &server, OnRegisterChannelMessage)
199 IPC_MESSAGE_HANDLER_EX(ChannelServiceMsg_sendRequest, &server, OnSendRequestMessage)
200 IPC_MESSAGE_HANDLER_EX(ChannelServiceMsg_sendNullRequest, &server, OnSendNullRequestMessage)
201 IPC_MESSAGE_HANDLER_EX(ChannelServiceMsg_sendResponse, &server, OnSendResponseMessage)
202 IPC_MESSAGE_HANDLER_EX(ChannelServiceMsg_sendNullResponse, &server, OnSendNullResponseMessage)
203 IPC_END_MESSAGE_MAP_EX()
207 _ChannelServiceStub::OnIpcServerStarted(const _IpcServer& server)
213 _ChannelServiceStub::OnIpcServerStopped(const _IpcServer& server)
219 _ChannelServiceStub::OnIpcClientConnected(const _IpcServer& server, int clientId)
225 _ChannelServiceStub::OnIpcClientDisconnected(const _IpcServer& server, int clientId)
227 SysAssertf(__pChannelService != null, "Channel service has not been initialized.");
228 SysLog(NID_IO, "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
229 __pChannelService->UnregisterChannel(clientId);
230 SysLog(NID_IO, ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>");