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 #define IPC_MESSAGE_IMPL
31 #include <FBaseSysLog.h>
32 #include <FBaseRt_EventDispatcher.h>
33 #include "FIo_IpcServer.h"
34 #include "FIo_ChannelServiceStub.h"
35 #include "FIo_ChannelMessages.h"
36 #include "FIo_ChannelService.h"
38 using namespace Tizen::Base;
39 using namespace Tizen::Base::Collection;
40 using namespace Tizen::Base::Runtime;
41 using namespace Tizen::Io;
45 namespace Tizen { namespace Io
48 _ChannelServiceStub::_ChannelServiceStub(void)
50 , __pChannelService(null)
55 _ChannelServiceStub::~_ChannelServiceStub(void)
57 if (__pIpcServer != null)
65 _ChannelServiceStub::Construct(void)
67 SysAssertf(__pIpcServer == null, "Already constructed. Calling Construct() twice or more on a same instance is not allowed for this class.");
70 _IpcServer* pIpcServer = null;
72 pIpcServer = new (std::nothrow) _IpcServer;
73 SysTryReturnResult(NID_IO, pIpcServer != null, E_OUT_OF_MEMORY, "The memory is insufficient.");
75 r = pIpcServer->Construct("osp.io.ipcserver.channelmanager", *this, false);
76 SysTryCatch(NID_IO, !IsFailed(r), , r, "[%s] Failed to create IPC server(ChannelService)", GetErrorMessage(r));
78 __pIpcServer = pIpcServer;
89 _ChannelServiceStub::SetChannelService(_ChannelService& service)
91 __pChannelService = &service;
95 _ChannelServiceStub::OnRegisterChannelMessage(const Tizen::Base::String& appId, int* pResult)
97 SysAssertf(__pChannelService != null, "Channel service has not been initialized.\n");
99 int clientId = __pIpcServer->GetClientId();
101 *pResult = __pChannelService->RegisterChannel(appId, clientId);
107 _ChannelServiceStub::OnSendRequestMessage(const String& src,
109 const ArrayList& args,
113 SysAssertf(__pChannelService != null, "Channel service has not been initialized.\n");
115 *pResult = __pChannelService->SendRequest(src, dest, args, requestId);
117 const_cast<ArrayList*>(&args)->RemoveAll(true);
123 _ChannelServiceStub::OnSendNullRequestMessage(const String& src,
128 SysAssertf(__pChannelService != null, "Channel service has not been initialized.\n");
130 *pResult = __pChannelService->SendNullRequest(src, dest, requestId);
136 _ChannelServiceStub::OnSendResponseMessage(const String& src,
138 const ArrayList& args,
142 SysAssertf(__pChannelService != null, "Channel service has not been initialized.\n");
144 *pResult = __pChannelService->SendResponse(src, dest, args, requestId);
146 const_cast<ArrayList*>(&args)->RemoveAll(true);
152 _ChannelServiceStub::OnSendNullResponseMessage(const String& src,
157 SysAssertf(__pChannelService != null, "Channel service has not been initialized.\n");
159 *pResult = __pChannelService->SendNullResponse(src, dest, requestId);
165 _ChannelServiceStub::SendRequest(int clientId, const String& src, const String& dest, const ArrayList& args, int requestId)
167 SysAssertf(__pIpcServer != null, "Not yet constructed. Construct() should be called before use.\n");
169 return __pIpcServer->SendResponse(clientId, new ChannelServiceMsg_sendRequestAsync(src, dest, args, requestId));
173 _ChannelServiceStub::SendNullRequest(int clientId, const String& src, const String& dest, int requestId)
175 SysAssertf(__pIpcServer != null, "Not yet constructed. Construct() should be called before use.\n");
177 return __pIpcServer->SendResponse(clientId, new ChannelServiceMsg_sendNullRequestAsync(src, dest, requestId));
181 _ChannelServiceStub::SendResponse(int clientId, const String& src, const String& dest, const ArrayList& args, int requestId)
183 SysAssertf(__pIpcServer != null, "Not yet constructed. Construct() should be called before use.\n");
185 return __pIpcServer->SendResponse(clientId, new ChannelServiceMsg_sendResponseAsync(src, dest, args, requestId));
189 _ChannelServiceStub::SendNullResponse(int clientId, const String& src, const String& dest, int requestId)
191 SysAssertf(__pIpcServer != null, "Not yet constructed. Construct() should be called before use.\n");
193 return __pIpcServer->SendResponse(clientId, new ChannelServiceMsg_sendNullResponseAsync(src, dest, requestId));
197 _ChannelServiceStub::OnIpcRequestReceived(_IpcServer& server, const IPC::Message& message)
199 IPC_BEGIN_MESSAGE_MAP(_ChannelServiceStub, message)
200 IPC_MESSAGE_HANDLER_EX(ChannelServiceMsg_register, &server, OnRegisterChannelMessage)
201 IPC_MESSAGE_HANDLER_EX(ChannelServiceMsg_sendRequest, &server, OnSendRequestMessage)
202 IPC_MESSAGE_HANDLER_EX(ChannelServiceMsg_sendNullRequest, &server, OnSendNullRequestMessage)
203 IPC_MESSAGE_HANDLER_EX(ChannelServiceMsg_sendResponse, &server, OnSendResponseMessage)
204 IPC_MESSAGE_HANDLER_EX(ChannelServiceMsg_sendNullResponse, &server, OnSendNullResponseMessage)
205 IPC_END_MESSAGE_MAP()
209 _ChannelServiceStub::OnIpcServerStarted(const _IpcServer& server)
215 _ChannelServiceStub::OnIpcServerStopped(const _IpcServer& server)
221 _ChannelServiceStub::OnIpcClientConnected(const _IpcServer& server, int clientId)
227 _ChannelServiceStub::OnIpcClientDisconnected(const _IpcServer& server, int clientId)
229 SysAssertf(__pChannelService != null, "Channel service has not been initialized.");
230 SysLog(NID_IO, "<<<<<<<<<<<<<<<<<<<<<<<<<<<<<");
231 __pChannelService->UnregisterChannel(clientId);
232 SysLog(NID_IO, ">>>>>>>>>>>>>>>>>>>>>>>>>>>>>");