2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
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 #include <dpl/log/log.h>
19 #include <CommonsJavaScript/JSCallbackManager.h>
20 #include <Tizen/Common/JSTizenExceptionFactory.h>
21 #include <Tizen/Common/JSTizenException.h>
22 #include "ResponseDispatcher.h"
23 #include "NFCConverter.h"
24 #include "JSNdefMessage.h"
27 using namespace TizenApis::Api::NFC;
28 using namespace TizenApis::Commons;
29 using namespace WrtDeviceApis::Commons;
30 using namespace WrtDeviceApis::CommonsJavaScript;
34 NFCResponseDispatcher& NFCResponseDispatcher::getInstance()
36 static NFCResponseDispatcher instance;
40 NFCResponseDispatcher::NFCResponseDispatcher() :
41 readNDEFAnswerReceiver(ThreadEnum::NULL_THREAD),
42 writeNDEFAnswerReceiver(ThreadEnum::NULL_THREAD),
43 transceiveAnswerReceiver(ThreadEnum::NULL_THREAD),
44 formatAnswerReceiver(ThreadEnum::NULL_THREAD),
45 mifareClassicAuthenticateWithKeyAAnswerReceiver(ThreadEnum::NULL_THREAD),
46 mifareClassicAuthenticateWithKeyBAnswerReceiver(ThreadEnum::NULL_THREAD),
47 mifareClassicReadBlockAnswerReceiver(ThreadEnum::NULL_THREAD),
48 mifareClassicWriteBlockAnswerReceiver(ThreadEnum::NULL_THREAD),
49 mifareClassicIncrementBlockValueAnswerReceiver(ThreadEnum::NULL_THREAD),
50 mifareClassicDecrementBlockValueAnswerReceiver(ThreadEnum::NULL_THREAD),
51 mifareClassicTransferAnswerReceiver(ThreadEnum::NULL_THREAD),
52 mifareClassicRestoreAnswerReceiver(ThreadEnum::NULL_THREAD),
53 mifareUltraReadPageAnswerReceiver(ThreadEnum::NULL_THREAD),
54 mifareUltraWritePageAnswerReceiver(ThreadEnum::NULL_THREAD),
55 TargetSendNdefAnswerReceiver(ThreadEnum::NULL_THREAD),
56 TargetReceiveNdefListener(ThreadEnum::NULL_THREAD)
61 NFCResponseDispatcher::~NFCResponseDispatcher()
66 void NFCResponseDispatcher::OnAnswerReceived(const EventTagActionReadPtr &event)
68 JSCallbackManagerPtr cbm =
69 DPL::StaticPointerCast<JSCallbackManager>(event->getPrivateData());
73 LogDebug("no callback manager");
76 if (event->getResult()) {
77 LogDebug("result success");
78 cbm->callOnSuccess(JSNdefMessage::createJSObject(cbm->getContext(), event->getReadNdefResult()));
81 LogDebug("result fail");
82 JSValueRef errorObject = JSTizenExceptionFactory::makeErrorObject(cbm->getContext(), JSTizenException::UNKNOWN_ERROR,"Unknown Error");
83 cbm->callOnError(errorObject);
84 } Catch (PlatformException) {
85 LogError("Platform can't create NdefMessage" << _rethrown_exception.GetMessage());
86 JSValueRef errorObject = JSTizenExceptionFactory::makeErrorObject(cbm->getContext(), JSTizenException::UNKNOWN_ERROR,"Unknown Error");
87 cbm->callOnError(errorObject);
89 LogError("Exception: " << _rethrown_exception.GetMessage());
90 JSValueRef errorObject = JSTizenExceptionFactory::makeErrorObject(cbm->getContext(), JSTizenException::UNKNOWN_ERROR,"Unknown Error");
91 cbm->callOnError(errorObject);
95 void NFCResponseDispatcher::OnAnswerReceived(const EventTagActionWritePtr &event)
97 JSCallbackManagerPtr cbm =
98 DPL::StaticPointerCast<JSCallbackManager>(event->getPrivateData());
101 LogDebug("no callback manager");
105 JSContextRef context = cbm->getContext();
107 if (event->getResult()) {
108 LogDebug("result success");
109 cbm->callOnSuccess();
112 LogDebug("result fail");
114 cbm->callOnError(JSTizenExceptionFactory::makeErrorObject(cbm->getContext(), JSTizenException::UNKNOWN_ERROR,"Unknown Error"));
118 void NFCResponseDispatcher::OnAnswerReceived(const EventTagActionTransceivePtr &event)
120 JSCallbackManagerPtr cbm =
121 DPL::StaticPointerCast<JSCallbackManager>(event->getPrivateData());
125 LogDebug("no callback manager");
129 JSContextRef context = cbm->getContext();
131 if (event->getResult()) {
132 NFCConverter convert(context);
133 LogDebug("result success");
134 cbm->callOnSuccess(convert.toJSValueRef(event->getTransceiveBuffer()));
137 LogDebug("result fail");
139 cbm->callOnError(JSTizenExceptionFactory::makeErrorObject(cbm->getContext(), JSTizenException::UNKNOWN_ERROR,"Unknown Error"));
140 } Catch (ConversionException) {
141 LogError("Conversion exception while processing EventTagActionTransceive");
142 JSValueRef errorObject = JSTizenExceptionFactory::makeErrorObject(cbm->getContext(), JSTizenException::UNKNOWN_ERROR,"Unknown Error");
143 cbm->callOnError(errorObject);
144 } Catch (Exception) {
145 LogError("Exception: " << _rethrown_exception.GetMessage());
146 JSValueRef errorObject = JSTizenExceptionFactory::makeErrorObject(cbm->getContext(), JSTizenException::UNKNOWN_ERROR,"Unknown Error");
147 cbm->callOnError(errorObject);
151 void NFCResponseDispatcher::OnAnswerReceived(const EventTagActionFormatPtr &event)
153 JSCallbackManagerPtr cbm =
154 DPL::StaticPointerCast<JSCallbackManager>(event->getPrivateData());
157 LogDebug("no callback manager");
161 JSContextRef context = cbm->getContext();
163 if (event->getResult()) {
164 LogDebug("result success");
165 cbm->callOnSuccess();
168 LogDebug("result fail");
170 cbm->callOnError(JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::UNKNOWN_ERROR,"Unknown Error"));
174 void NFCResponseDispatcher::OnAnswerReceived(const EventTagMifareClassicAuthenticateWithKeyAPtr &event)
176 JSCallbackManagerPtr cbm =
177 DPL::StaticPointerCast<JSCallbackManager>(event->getPrivateData());
180 LogDebug("no callback manager");
183 if (event->getResult()) {
184 LogDebug("result success");
185 cbm->callOnSuccess();
188 LogDebug("result fail");
189 JSValueRef errorObject = JSTizenExceptionFactory::makeErrorObject(cbm->getContext(), JSTizenException::UNKNOWN_ERROR,"Unknown Error");
190 cbm->callOnError(errorObject);
193 void NFCResponseDispatcher::OnAnswerReceived(const EventTagMifareClassicAuthenticateWithKeyBPtr &event)
195 JSCallbackManagerPtr cbm =
196 DPL::StaticPointerCast<JSCallbackManager>(event->getPrivateData());
199 LogDebug("no callback manager");
203 JSContextRef context = cbm->getContext();
205 if (event->getResult()) {
206 LogDebug("result success");
207 cbm->callOnSuccess();
210 LogDebug("result fail");
212 cbm->callOnError(JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::UNKNOWN_ERROR,"Unknown Error"));
215 void NFCResponseDispatcher::OnAnswerReceived(const EventTagMifareClassicReadBlockPtr &event)
217 JSCallbackManagerPtr cbm =
218 DPL::StaticPointerCast<JSCallbackManager>(event->getPrivateData());
222 LogDebug("no callback manager");
226 JSContextRef context = cbm->getContext();
228 if (event->getResult()) {
229 NFCConverter convert(context);
230 LogDebug("result success");
231 cbm->callOnSuccess(convert.toJSValueRef(event->getBlockData()));
234 LogDebug("result fail");
236 cbm->callOnError(JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::UNKNOWN_ERROR,"Unknown Error"));
237 } Catch (ConversionException) {
238 LogError("Conversion exception while processing EventTagMifareClassicReadBlock");
239 JSValueRef errorObject = JSTizenExceptionFactory::makeErrorObject(cbm->getContext(), JSTizenException::UNKNOWN_ERROR,"Unknown Error");
240 cbm->callOnError(errorObject);
241 } Catch (Exception) {
242 LogError("Exception: " << _rethrown_exception.GetMessage());
243 JSValueRef errorObject = JSTizenExceptionFactory::makeErrorObject(cbm->getContext(), JSTizenException::UNKNOWN_ERROR,"Unknown Error");
244 cbm->callOnError(errorObject);
248 void NFCResponseDispatcher::OnAnswerReceived(const EventTagMifareClassicWriteBlockPtr &event)
250 JSCallbackManagerPtr cbm =
251 DPL::StaticPointerCast<JSCallbackManager>(event->getPrivateData());
254 LogDebug("no callback manager");
257 if (event->getResult()) {
258 LogDebug("result success");
259 cbm->callOnSuccess();
262 LogDebug("result fail");
263 JSValueRef errorObject = JSTizenExceptionFactory::makeErrorObject(cbm->getContext(), JSTizenException::UNKNOWN_ERROR,"Unknown Error");
264 cbm->callOnError(errorObject);
267 void NFCResponseDispatcher::OnAnswerReceived(const EventTagMifareClassicIncrementBlockValuePtr &event)
269 JSCallbackManagerPtr cbm =
270 DPL::StaticPointerCast<JSCallbackManager>(event->getPrivateData());
273 LogDebug("no callback manager");
277 JSContextRef context = cbm->getContext();
279 if (event->getResult()) {
280 LogDebug("result success");
281 cbm->callOnSuccess();
284 LogDebug("result fail");
286 cbm->callOnError(JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::UNKNOWN_ERROR,"Unknown Error"));
289 void NFCResponseDispatcher::OnAnswerReceived(const EventTagMifareClassicDecrementBlockValuePtr &event)
291 JSCallbackManagerPtr cbm =
292 DPL::StaticPointerCast<JSCallbackManager>(event->getPrivateData());
295 LogDebug("no callback manager");
299 JSContextRef context = cbm->getContext();
301 if (event->getResult()) {
302 LogDebug("result success");
303 cbm->callOnSuccess();
306 LogDebug("result fail");
308 cbm->callOnError(JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::UNKNOWN_ERROR,"Unknown Error"));
311 void NFCResponseDispatcher::OnAnswerReceived(const EventTagMifareClassicTransferPtr &event)
313 JSCallbackManagerPtr cbm =
314 DPL::StaticPointerCast<JSCallbackManager>(event->getPrivateData());
317 LogDebug("no callback manager");
320 if (event->getResult()) {
321 LogDebug("result success");
322 cbm->callOnSuccess();
325 LogDebug("result fail");
326 JSValueRef errorObject = JSTizenExceptionFactory::makeErrorObject(cbm->getContext(), JSTizenException::UNKNOWN_ERROR,"Unknown Error");
327 cbm->callOnError(errorObject);
330 void NFCResponseDispatcher::OnAnswerReceived(const EventTagMifareClassicRestorePtr &event)
332 JSCallbackManagerPtr cbm =
333 DPL::StaticPointerCast<JSCallbackManager>(event->getPrivateData());
336 LogDebug("no callback manager");
340 JSContextRef context = cbm->getContext();
342 if (event->getResult()) {
343 LogDebug("result success");
344 cbm->callOnSuccess();
347 LogDebug("result fail");
349 cbm->callOnError(JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::UNKNOWN_ERROR,"Unknown Error"));
352 void NFCResponseDispatcher::OnAnswerReceived(const EventTagMifareUltraReadPagePtr &event)
354 JSCallbackManagerPtr cbm =
355 DPL::StaticPointerCast<JSCallbackManager>(event->getPrivateData());
359 LogDebug("no callback manager");
363 JSContextRef context = cbm->getContext();
364 if (event->getResult()) {
365 NFCConverter convert(context);
366 LogDebug("result success");
367 cbm->callOnSuccess(convert.toJSValueRef(event->getReadPageResult()));
370 LogDebug("result fail");
371 JSValueRef errorObject = JSTizenExceptionFactory::makeErrorObject(cbm->getContext(), JSTizenException::UNKNOWN_ERROR,"Unknown Error");
372 cbm->callOnError(errorObject);
373 } Catch (ConversionException) {
374 LogError("Conversion exception while processing EventTagMifareUltraReadPage");
375 JSValueRef errorObject = JSTizenExceptionFactory::makeErrorObject(cbm->getContext(), JSTizenException::UNKNOWN_ERROR,"Unknown Error");
376 cbm->callOnError(errorObject);
377 } Catch (Exception) {
378 LogError("Exception: " << _rethrown_exception.GetMessage());
379 JSValueRef errorObject = JSTizenExceptionFactory::makeErrorObject(cbm->getContext(), JSTizenException::UNKNOWN_ERROR,"Unknown Error");
380 cbm->callOnError(errorObject);
384 void NFCResponseDispatcher::OnAnswerReceived(const EventTagMifareUltraWritePagePtr &event)
386 JSCallbackManagerPtr cbm =
387 DPL::StaticPointerCast<JSCallbackManager>(event->getPrivateData());
390 LogDebug("no callback manager");
394 JSContextRef context = cbm->getContext();
396 if (event->getResult()) {
397 LogDebug("result success");
398 cbm->callOnSuccess();
401 LogDebug("result fail");
403 cbm->callOnError(JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::UNKNOWN_ERROR,"Unknown Error"));
406 void NFCResponseDispatcher::OnAnswerReceived(const EventTargetActionSendPtr &event)
408 JSCallbackManagerPtr cbm =
409 DPL::StaticPointerCast<JSCallbackManager>(event->getPrivateData());
412 LogDebug("no callback manager");
416 JSContextRef context = cbm->getContext();
418 if (event->getResult()) {
419 LogDebug("result success");
420 cbm->callOnSuccess();
423 LogDebug("result fail");
425 cbm->callOnError(JSTizenExceptionFactory::makeErrorObject(context, JSTizenException::UNKNOWN_ERROR,"Unknown Error"));
428 void NFCResponseDispatcher::onAnswerReceived(const EventTargetActionReceivePtr &event)
430 LogDebug("onAnswerReceived Enter");
431 JSCallbackManagerPtr cbm =
432 DPL::StaticPointerCast<JSCallbackManager>(event->getPrivateData());
436 LogDebug("no callback manager");
440 JSContextRef context = cbm->getContext();
442 LogDebug("result success");
443 cbm->callOnSuccess(JSNdefMessage::createJSObject(context, event->getReadNdefResult()));
444 } Catch (PlatformException) {
445 LogError("Platform can't create NdefMessage" << _rethrown_exception.GetMessage());
446 } Catch (Exception) {
447 LogError("Exception: " << _rethrown_exception.GetMessage());