return instance;
}
+long long* IotconClientManager::Add(long long id) {
+ ScopeLogger();
+ ids_.push_back(new long long(id));
+ return ids_.back();
+}
+
+void IotconClientManager::Remove(long long id) {
+ ScopeLogger();
+ auto it = ids_.end();
+ while (it > ids_.begin()) {
+ --it;
+ if (**it == id) {
+ ids_.erase(it);
+ return;
+ }
+ }
+}
+
+bool IotconClientManager::IfExists(long long id) {
+ ScopeLogger();
+ for (auto v : ids_) {
+ if (*v == id) {
+ return true;
+ }
+ }
+ return false;
+}
+
+FoundRemoteInfoPtr IotconClientManager::GetFoundRemoteInfoPtr(long long id) {
+ ScopeLogger();
+ if (IfExists(id)) {
+ return remotes_map_.at(id);
+ }
+ return nullptr;
+}
+
void IotconClientManager::PresenceHandler(iotcon_presence_h presence, iotcon_error_e err,
iotcon_presence_response_h response, void* user_data) {
ScopeLogger();
ptr->ref_count--;
if (ptr->ref_count <= 0) {
LoggerD("Handle not needed anymore, removing from map");
+ Remove(ptr->id);
remotes_map_.erase(ptr->id);
return PrepareManageIdAnswer(false);
}
static void ObserveCallback(iotcon_remote_resource_h resource, iotcon_error_e err,
int sequence_number, iotcon_response_h response, void* user_data) {
ScopeLogger();
- FoundRemoteInfo* ptr = static_cast<FoundRemoteInfo*>(user_data);
+ long long* id = static_cast<long long*>(user_data);
+
+ FoundRemoteInfoPtr ptr = IotconClientManager::GetInstance().GetFoundRemoteInfoPtr(*id);
+
if (nullptr == ptr) {
- LoggerE("ObserveCallback() failed. Ignoring callback");
+ LoggerE("ObserveCallback() failed. Ignoring callback");
return;
}
}
}
- result = IotconUtils::ConvertIotconError(iotcon_remote_resource_observe_register(
- ptr->handle, observe_policy, query, ObserveCallback, ptr.get()));
+ picojson::value ret = IotconClientManager::GetInstance().StoreRemoteResource(ptr);
+ result = IotconUtils::ConvertIotconError(
+ iotcon_remote_resource_observe_register(ptr->handle, observe_policy, query, ObserveCallback,
+ IotconClientManager::GetInstance().Add(ptr->id)));
if (!result) {
+ IotconClientManager::GetInstance().RemoveRemoteResource(ptr);
return result;
}
observing_started_ = true;
- return common::TizenSuccess{IotconClientManager::GetInstance().StoreRemoteResource(ptr)};
+ return common::TizenSuccess{ret};
}
common::TizenResult IotconInstance::RemoteResourceStopObserving(const picojson::object& args) {
static void RepresentationChangedCallback(iotcon_remote_resource_h resource,
iotcon_representation_h representation, void* user_data) {
ScopeLogger();
- FoundRemoteInfo* ptr = static_cast<FoundRemoteInfo*>(user_data);
+ long long* id = static_cast<long long*>(user_data);
+
+ FoundRemoteInfoPtr ptr = IotconClientManager::GetInstance().GetFoundRemoteInfoPtr(*id);
+
if (nullptr == ptr) {
- LoggerE("RepresentationChangeCallback() failed. Ignoring callback");
+ LoggerE("RepresentationChangeCallback() failed. Ignoring callback");
return;
}
Post(kRemoteResourceCacheChangeListener, common::TizenSuccess{response});
};
- result = IotconUtils::ConvertIotconError(
- iotcon_remote_resource_start_caching(ptr->handle, RepresentationChangedCallback, ptr.get()));
+ picojson::value ret = IotconClientManager::GetInstance().StoreRemoteResource(ptr);
+ result = IotconUtils::ConvertIotconError(iotcon_remote_resource_start_caching(
+ ptr->handle, RepresentationChangedCallback, IotconClientManager::GetInstance().Add(ptr->id)));
if (!result) {
+ IotconClientManager::GetInstance().RemoveRemoteResource(ptr);
return result;
}
caching_started_ = true;
- return common::TizenSuccess{IotconClientManager::GetInstance().StoreRemoteResource(ptr)};
+ return common::TizenSuccess{ret};
}
common::TizenResult IotconInstance::RemoteResourceStopCaching(const picojson::object& args) {
static void MonitoringCallback(iotcon_remote_resource_h resource,
iotcon_remote_resource_state_e state, void* user_data) {
ScopeLogger();
- FoundRemoteInfo* ptr = static_cast<FoundRemoteInfo*>(user_data);
+ long long* id = static_cast<long long*>(user_data);
+
+ FoundRemoteInfoPtr ptr = IotconClientManager::GetInstance().GetFoundRemoteInfoPtr(*id);
+
if (nullptr == ptr) {
- LoggerE("MonitoringCallback() failed. Ignoring callback");
+ LoggerE("MonitoringCallback() failed. Ignoring callback");
return;
}
Post(kRemoteResourceStateChangeListener, common::TizenSuccess{response});
};
- result = IotconUtils::ConvertIotconError(
- iotcon_remote_resource_start_monitoring(ptr->handle, MonitoringCallback, ptr.get()));
+ picojson::value ret = IotconClientManager::GetInstance().StoreRemoteResource(ptr);
+ result = IotconUtils::ConvertIotconError(iotcon_remote_resource_start_monitoring(
+ ptr->handle, MonitoringCallback, IotconClientManager::GetInstance().Add(ptr->id)));
if (!result) {
+ IotconClientManager::GetInstance().RemoveRemoteResource(ptr);
return result;
}
monitoring_started_ = true;
- return common::TizenSuccess{IotconClientManager::GetInstance().StoreRemoteResource(ptr)};
+ return common::TizenSuccess{ret};
}
common::TizenResult IotconInstance::RemoteResourceUnsetResourceStateChangeListener(