}
};
+var findDeviceInfoListener = createListener('FindDeviceInfoListener');
+var globalFindDeviceInfoId = 0;
Client.prototype.findDeviceInfo = function() {
var args = validator.validateMethod(arguments, [{
name: 'hostAddress',
}]);
var callArgs = {};
-
+ callArgs.id = ++globalFindDeviceInfoId;
callArgs.hostAddress = args.hostAddress;
callArgs.query = args.query;
callArgs.connectivityType = args.connectivityType;
}
};
- var result = native.call('IotconClient_findDeviceInfo', callArgs, callback);
+ var result = native.call('IotconClient_findDeviceInfo', callArgs);
if (native.isFailure(result)) {
throw native.getErrorObject(result);
+ }else{
+ findDeviceInfoListener.addListener(callArgs.id, callback);
}
};
+var findPlatformInfoListener = createListener('FindPlatformInfoListener');
+var globalFindPlatformInfoId = 0;
Client.prototype.findPlatformInfo = function() {
var args = validator.validateMethod(arguments, [{
name: 'hostAddress',
}]);
var callArgs = {};
+ callArgs.id = ++globalFindPlatformInfoId;
callArgs.hostAddress = args.hostAddress;
callArgs.query = args.query;
callArgs.connectivityType = args.connectivityType;
}
};
- var result = native.call('IotconClient_findPlatformInfo', callArgs, callback);
+ var result = native.call('IotconClient_findPlatformInfo', callArgs);
if (native.isFailure(result)) {
throw native.getErrorObject(result);
+ }else{
+ findPlatformInfoListener.addListener(callArgs.id, callback);
}
};
common::PostCallback fun;
};
+struct CallbackData2 {
+ common::PostCallback fun;
+ bool callback_called;
+};
+
long long GetId(const picojson::object& args) {
return static_cast<long long>(args.find(kId)->second.get<double>());
}
if (data) {
picojson::value value{picojson::object{}};
- auto result = IotconUtils::ConvertIotconError(err);
-
- if (result) {
- result = IotconUtils::ResponseToJson(response, &value.get<picojson::object>());
- if (!result) {
- LoggerE("ResponseToJson() failed");
+ common::TizenResult ret = common::TizenSuccess();
+
+ switch (err) {
+ case IOTCON_ERROR_NONE:
+ ret = IotconUtils::ResponseToJson(response, &value.get<picojson::object>());
+ break;
+ case IOTCON_ERROR_TIMEOUT:
+ LoggerD("IOTCON_TIMEOUT ");
+ default:
+ ret = IotconUtils::ConvertIotconError(err);
}
- } else {
- LoggerE("RemoteResourceResponseCallback() reports error");
- }
-
- data->fun(result, value);
+ data->fun(ret, value);
} else {
LoggerE("Native callback data is null");
}
const common::ListenerToken kGeneratedPinToken{"GeneratedPinListener"};
const common::ListenerToken kResourceRequestListenerToken{"ResourceRequestListener"};
const common::ListenerToken kFindResourceListenerToken{"FindResourceListener"};
+const common::ListenerToken kFindDeviceInfoListenerToken{"FindDeviceInfoListener"};
+const common::ListenerToken kFindPlatformInfoListenerToken{"FindPlatformInfoListener"};
const common::ListenerToken kPresenceEventListenerToken{"PresenceEventListener"};
const common::ListenerToken kRemoteResourceStateChangeListener
{"RemoteResourceStateChangeListener"};
REGISTER_SYNC("IotconServer_stopPresence", ServerStopPresence);
REGISTER_SYNC("Iotcon_setDeviceName", SetDeviceName);
REGISTER_SYNC("IotconClient_findResource", ClientFindResource);
-
+ REGISTER_SYNC("IotconClient_findDeviceInfo", ClientFindDeviceInfo);
+ REGISTER_SYNC("IotconClient_findPlatformInfo", ClientFindPlatformInfo);
#undef REGISTER_SYNC
#define REGISTER_ASYNC(c, x) \
REGISTER_ASYNC("IotconRemoteResource_methodPut", RemoteResourceMethodPut);
REGISTER_ASYNC("IotconRemoteResource_methodPost", RemoteResourceMethodPost);
REGISTER_ASYNC("IotconRemoteResource_methodDelete", RemoteResourceMethodDelete);
- REGISTER_ASYNC("IotconClient_findDeviceInfo", ClientFindDeviceInfo);
- REGISTER_ASYNC("IotconClient_findPlatformInfo", ClientFindPlatformInfo);
#undef REGISTER_ASYNC
}
bool IotconInstance::ResourceFoundCallback(iotcon_remote_resource_h resource,
iotcon_error_e result, void *user_data) {
ScopeLogger();
- CallbackData* data = static_cast<CallbackData*>(user_data);
+ CallbackData2* data = static_cast<CallbackData2*>(user_data);
if (nullptr == data) {
LoggerE("ResourceFoundCallback() failed. Ignoring callback");
return IOTCON_FUNC_STOP;
case IOTCON_ERROR_NONE:
break;
case IOTCON_ERROR_TIMEOUT:
+ LoggerD("IOTCON_TIMEOUT data->callback_called :%d", data->callback_called);
+ if(!data->callback_called){
+ auto ret = IotconUtils::ConvertIotconError(result);
+ data->fun(ret, picojson::value{});
+ }
delete data;
return IOTCON_FUNC_STOP;
default:
data->fun(ret, picojson::value{});
return IOTCON_FUNC_STOP;
}
+ data->callback_called = true;
data->fun(ret, json_result);
return IOTCON_FUNC_CONTINUE;
Post(kFindResourceListenerToken, common::TizenSuccess{response});
};
- CallbackData* data = new CallbackData{response};
+
+ CallbackData2* data = new CallbackData2{};
+ data->fun = response;
+ data->callback_called = false;
LoggerD("Running find with:\nhost_address: %s,\nconnectivity_type: %d",
host_address, connectivity_type);
iotcon_error_e result, void *user_data) {
ScopeLogger();
- CallbackData* data = static_cast<CallbackData*>(user_data);
+ CallbackData2* data = static_cast<CallbackData2*>(user_data);
if (nullptr == data) {
LoggerE("IotconDeviceInfoCb() failed. Ignoring callback");
return IOTCON_FUNC_STOP;
switch (result) {
case IOTCON_ERROR_NONE:
ret = IotconUtils::DeviceInfoToJson(device_info,&v.get<picojson::object>());
+ data->callback_called = true;
break;
case IOTCON_ERROR_TIMEOUT:
+ LoggerD("IOTCON_TIMEOUT data->callback_called :%d", data->callback_called);
+ if(!data->callback_called){
+ ret = IotconUtils::ConvertIotconError(result);
+ data->fun(ret, v);
+ }
delete data;
return IOTCON_FUNC_STOP;
default:
return IOTCON_FUNC_CONTINUE;
}
-common::TizenResult IotconInstance::ClientFindDeviceInfo(const picojson::object& args,
- const common::AsyncToken& token) {
+common::TizenResult IotconInstance::ClientFindDeviceInfo(const picojson::object& args) {
ScopeLogger();
CHECK_PRIVILEGE(kPrivilegeIotcon);
std::string con_type = args.find(kConnectivityType)->second.get<std::string>();
iotcon_connectivity_type_e con_type_e = IotconUtils::ToConnectivityType(con_type);
- CallbackData* data = new CallbackData{SimplePost(token)};
+ long long id = GetId(args);
+ auto response = [this, id](const common::TizenResult& res, const picojson::value& v) {
+ picojson::value response{picojson::object{}};
+ auto& obj = response.get<picojson::object>();
+
+ obj.insert(std::make_pair(kId, picojson::value{static_cast<double>(id)}));
+ if(res) {
+ common::tools::ReportSuccess(v, obj);
+ } else {
+ common::tools::ReportError(res, &obj);
+ }
+
+ Post(kFindDeviceInfoListenerToken, common::TizenSuccess{response});
+ };
+
+ CallbackData2* data = new CallbackData2{};
+ data->fun = response;
+ data->callback_called = false;
auto result = IotconUtils::ConvertIotconError(
iotcon_find_device_info(host_address, con_type_e, query, IotconDeviceInfoCb, data));
iotcon_error_e result, void *user_data) {
ScopeLogger();
- CallbackData* data = static_cast<CallbackData*>(user_data);
+ CallbackData2* data = static_cast<CallbackData2*>(user_data);
if (nullptr == data) {
LoggerE("IotconPlatformInfoCb() failed. Ignoring callback");
return IOTCON_FUNC_STOP;
switch (result) {
case IOTCON_ERROR_NONE:
ret = IotconUtils::PlatformInfoToJson(platform_info,&v.get<picojson::object>());
+ data->callback_called = true;
break;
case IOTCON_ERROR_TIMEOUT:
+ LoggerD("IOTCON_TIMEOUT data->callback_called :%d", data->callback_called);
+ if(!data->callback_called){
+ ret = IotconUtils::ConvertIotconError(result);
+ data->fun(ret, v);
+ }
delete data;
return IOTCON_FUNC_STOP;
default:
return IOTCON_FUNC_CONTINUE;
}
-common::TizenResult IotconInstance::ClientFindPlatformInfo(const picojson::object& args,
- const common::AsyncToken& token) {
+common::TizenResult IotconInstance::ClientFindPlatformInfo(const picojson::object& args) {
ScopeLogger();
CHECK_PRIVILEGE(kPrivilegeIotcon);
std::string con_type = args.find(kConnectivityType)->second.get<std::string>();
iotcon_connectivity_type_e con_type_e = IotconUtils::ToConnectivityType(con_type);
- CallbackData* data = new CallbackData{SimplePost(token)};
+ long long id = GetId(args);
+ auto response = [this, id](const common::TizenResult& res, const picojson::value& v) {
+ picojson::value response{picojson::object{}};
+ auto& obj = response.get<picojson::object>();
+
+ obj.insert(std::make_pair(kId, picojson::value{static_cast<double>(id)}));
+ if(res) {
+ common::tools::ReportSuccess(v, obj);
+ } else {
+ common::tools::ReportError(res, &obj);
+ }
+
+ Post(kFindPlatformInfoListenerToken, common::TizenSuccess{response});
+ };
+
+ CallbackData2* data = new CallbackData2{};
+ data->fun = response;
+ data->callback_called = false;
auto result = IotconUtils::ConvertIotconError(
iotcon_find_platform_info(host_address, con_type_e, query, IotconPlatformInfoCb, data));