wrt-plugins-tizen_0.4.23
[framework/web/wrt-plugins-tizen.git] / src / MessagePort / LocalMessagePortController.cpp
1 //
2 // Tizen Web Device API
3 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 //
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
8 //
9 // http://www.apache.org/licenses/LICENSE-2.0
10 //
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.
16 //
17
18 /**
19  * @file        MessagePortManagerController.cpp
20  * @author      Kisub Song (kisubs.song@samsung.com)
21  * @version     0.1
22  * @brief
23  */
24
25 #include "LocalMessagePortController.h"
26 #include <CommonsJavaScript/JSCallbackManager.h>
27 #include "MessagePortDataItem.h"
28 #include "MessagePortJSUtil.h"
29 #include <Logger.h>
30
31 namespace DeviceAPI {
32 namespace MessagePort {
33
34 using namespace DeviceAPI::Common;
35 using namespace WrtDeviceApis::Commons;
36 using namespace WrtDeviceApis::CommonsJavaScript;
37
38 LocalMessagePortController::LocalMessagePortController(JSContextRef context, LocalMessagePortPtr localMessagePort) :
39                 EventLocalMessagePortListenerListener(ThreadEnum::NULL_THREAD),
40                 LocalMessagePortPrivObject(context, localMessagePort)
41 {
42         LoggerD("LocalMessagePortController constructed : " << this);
43         if (!localMessagePort) {
44                 LoggerW("controller has no localMessagePort object");
45         }
46 }
47
48 LocalMessagePortController::~LocalMessagePortController()
49 {
50         LoggerD("LocalMessagePortController destructed : " << this);
51 }
52
53 void LocalMessagePortAsyncAnswerHandler::localMessagePortListener(const EventLocalMessagePortListenerPtr &event)
54 {
55         LoggerD("entered");
56         JSValueRef result[2];
57
58         JSCallbackManagerPtr cbm = DPL::StaticPointerCast<JSCallbackManager>(event->getPrivateData());
59         if (!cbm)
60         {
61                 LoggerE("no callback manager");
62                 return;
63         }
64
65         JSContextRef gContext = cbm->getContext();
66
67         if(!event->getDataIsSet())
68         {
69                 LoggerE("No data items");
70                 return;
71         }
72
73         try
74         {
75                 result[0] = MessagePortJSUtil::toJSValueRef(gContext, event->getData());
76         }
77         catch(BasePlatformException &e)
78         {
79                 LoggerE("Fail to convert MessagePortDataItemMap");
80                 return;
81         }
82
83         try
84         {
85                 if(event->getRemoteMessagePortIsSet())
86                         result[1] = MessagePortJSUtil::toJSValueRef(gContext, event->getRemoteMessagePort());
87                 else
88                         result[1] = JSValueMakeNull(gContext);
89         }
90         catch(BasePlatformException &e)
91         {
92                 LoggerE("Fail to convert RemoteMessagePort");
93                 return;
94         }
95
96         cbm->callOnSuccess(result, 2);
97 }
98
99 void LocalMessagePortController::onAnswerReceived(const EventLocalMessagePortListenerPtr &event)
100 {
101         if(event == NULL)
102         {
103                 LoggerE("wrong event");
104                 return;
105         }
106
107         LocalMessagePortAsyncAnswerHandler::localMessagePortListener(event);
108 }
109
110 } // MessagePort
111 } // DeviceAPI