JniOcResource::JniOcResource(std::shared_ptr<OCResource> resource)
: m_sharedResource(resource)
-{}
+{
+}
JniOcResource::~JniOcResource()
{
m_sharedResource = nullptr;
- jint envRet;
+ jint envRet = JNI_ERR;
JNIEnv *env = GetJNIEnv(envRet);
- if (nullptr == env) return;
+ if (nullptr == env)
+ {
+ return;
+ }
m_onGetManager.removeAllListeners(env);
m_onPutManager.removeAllListeners(env);
m_onPostManager.removeAllListeners(env);
m_onDeleteManager.removeAllListeners(env);
m_onObserveManager.removeAllListeners(env);
+#ifdef WITH_MQ
+ m_onFoundTopicResourceManager.removeAllListeners(env);
+ m_onSubcribeTopicManager.removeAllListeners(env);
+#endif
- if (JNI_EDETACHED == envRet) g_jvm->DetachCurrentThread();
+ if (JNI_EDETACHED == envRet)
+ {
+ g_jvm->DetachCurrentThread();
+ }
}
OCStackResult JniOcResource::get(JNIEnv* env, const QueryParamsMap &queryParametersMap, jobject jListener)
return m_sharedResource->observe(observeType, queryParametersMap, observeCallback, QoS);
}
-OCStackResult JniOcResource::cancelObserve(JNIEnv* env)
-{
- //this->m_onObserveManager.removeAllListeners(env);
- return m_sharedResource->cancelObserve();
-}
-
OCStackResult JniOcResource::cancelObserve(JNIEnv* env, QualityOfService qos)
{
- //TODO confirm behavior
- //add removal of java listeners by qos
- //this->m_onObserveManager.removeAllListeners(env);
+ // In Low case, after delete the callback and send empty message when client receive the notify.
+ // But TCP does not support EMPTY message.
+ if ((CT_ADAPTER_IP & connectivityType()) && QualityOfService::HighQos != qos)
+ {
+ this->m_onObserveManager.removeAllListeners(env);
+ }
return m_sharedResource->cancelObserve(qos);
}
return m_sharedResource->sid();
}
+std::string JniOcResource::deviceName() const
+{
+ return m_sharedResource->deviceName();
+}
+
JniOnGetListener* JniOcResource::addOnGetListener(JNIEnv* env, jobject jListener)
{
return this->m_onGetManager.addListener(env, jListener, this);
this->m_onObserveManager.removeListener(env, jListener);
}
+#ifdef WITH_MQ
+JniOnMQTopicFoundListener* JniOcResource::addOnTopicFoundListener(JNIEnv* env, jobject jListener)
+{
+ return this->m_onFoundTopicResourceManager.addListener(env, jListener, this);
+}
+
+void JniOcResource::removeOnTopicFoundListener(JNIEnv* env, jobject jListener)
+{
+ this->m_onFoundTopicResourceManager.removeListener(env, jListener);
+}
+
+JniOnMQSubscribeListener* JniOcResource::addOnMQTopicSubscribeListener(JNIEnv* env, jobject jListener)
+{
+ return this->m_onSubcribeTopicManager.addListener(env, jListener, this);
+}
+
+void JniOcResource::removeOnMQTopicSubscribeListener(JNIEnv* env, jobject jListener)
+{
+ this->m_onSubcribeTopicManager.removeListener(env, jListener);
+}
+#endif
+
std::shared_ptr<OCResource> JniOcResource::getOCResource()
{
return this->m_sharedResource;
return resource;
}
+#ifdef WITH_MQ
+OCStackResult JniOcResource::discoveryMQTopics(JNIEnv* env,
+ const QueryParamsMap &queryParametersMap, jobject jListener, QualityOfService QoS)
+{
+ JniOnMQTopicFoundListener *onTopicFoundListener = addOnTopicFoundListener(env, jListener);
+
+ MQTopicCallback findCallback = [onTopicFoundListener](const int& eCode,
+ const std::string& uri, std::shared_ptr<OCResource> resource)
+ {
+ onTopicFoundListener->foundTopicCallback(eCode, uri, resource);
+ };
+
+ return m_sharedResource->discoveryMQTopics(queryParametersMap, findCallback, QoS);
+}
+
+OCStackResult JniOcResource::createMQTopic(JNIEnv* env,
+ const OCRepresentation &representation, const std::string &targetUri,
+ const QueryParamsMap &queryParametersMap, jobject jListener, QualityOfService QoS)
+{
+ JniOnMQTopicFoundListener *onTopicCreatedListener = addOnTopicFoundListener(env, jListener);
+
+ MQTopicCallback createCallback = [onTopicCreatedListener](const int& eCode,
+ const std::string& uri, std::shared_ptr<OCResource> resource)
+ {
+ onTopicCreatedListener->createdTopicCallback(eCode, uri, resource);
+ };
+
+ return m_sharedResource->createMQTopic(representation, targetUri,
+ queryParametersMap,
+ createCallback, QoS);
+}
+#endif
+#ifdef MQ_SUBSCRIBER
+OCStackResult JniOcResource::subscribeMQTopic(JNIEnv* env,
+ const QueryParamsMap &queryParametersMap, jobject jListener, QualityOfService QoS)
+{
+ JniOnMQSubscribeListener *onSubscribeListener = addOnMQTopicSubscribeListener(env, jListener);
+
+ ObserveCallback subscribeCallback = [onSubscribeListener](const HeaderOptions& opts,
+ const OCRepresentation& rep, const int& eCode, const int& sequenceNumber)
+ {
+ onSubscribeListener->onSubscribeCallback(opts, rep, eCode, sequenceNumber);
+ };
+
+ return m_sharedResource->subscribeMQTopic(ObserveType::Observe, queryParametersMap,
+ subscribeCallback, QoS);
+}
+
+OCStackResult JniOcResource::unsubscribeMQTopic(QualityOfService QoS)
+{
+ return m_sharedResource->unsubscribeMQTopic(QoS);
+}
+
+OCStackResult JniOcResource::requestMQPublish(JNIEnv* env,
+ const QueryParamsMap &queryParametersMap, jobject jListener, QualityOfService QoS)
+{
+ JniOnPostListener *onPostListener = addOnPostListener(env, jListener);
+
+ PostCallback postCallback = [onPostListener](const HeaderOptions& opts,
+ const OCRepresentation& rep, const int eCode)
+ {
+ onPostListener->onPostCallback(opts, rep, eCode);
+ };
+
+ return m_sharedResource->requestMQPublish(queryParametersMap, postCallback, QoS);
+}
+#endif
+#ifdef MQ_PUBLISHER
+OCStackResult JniOcResource::publishMQTopic(JNIEnv* env, const OCRepresentation &representation,
+ const QueryParamsMap &queryParametersMap, jobject jListener, QualityOfService QoS)
+{
+ JniOnPostListener *onPostListener = addOnPostListener(env, jListener);
+
+ PostCallback postCallback = [onPostListener](const HeaderOptions& opts,
+ const OCRepresentation& rep, const int eCode)
+ {
+ onPostListener->onPostCallback(opts, rep, eCode);
+ };
+
+ return m_sharedResource->publishMQTopic(representation, queryParametersMap,
+ postCallback, QoS);
+}
+#endif
+
/*
* Class: org_iotivity_base_OcResource
* Method: get
return;
}
JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
- if (!resource) return;
+ if (!resource)
+ {
+ return;
+ }
QueryParamsMap qpm;
JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
return;
}
JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
- if (!resource) return;
+ if (!resource)
+ {
+ return;
+ }
QueryParamsMap qpm;
JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
return;
}
JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
- if (!resource) return;
+ if (!resource)
+ {
+ return;
+ }
QueryParamsMap qpm;
JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
resourceInterface = env->GetStringUTFChars(jResourceInterface, nullptr);
}
JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
- if (!resource) return;
+ if (!resource)
+ {
+ return;
+ }
QueryParamsMap qpm;
JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
return;
}
JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
- if (!resource) return;
+ if (!resource)
+ {
+ return;
+ }
OCRepresentation *representation = JniOcRepresentation::getOCRepresentationPtr(env, jRepresentation);
- if (!representation) return;
+ if (!representation)
+ {
+ return;
+ }
QueryParamsMap qpm;
JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
return;
}
JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
- if (!resource) return;
+ if (!resource)
+ {
+ return;
+ }
OCRepresentation *representation = JniOcRepresentation::getOCRepresentationPtr(env, jRepresentation);
- if (!representation) return;
+ if (!representation)
+ {
+ return;
+ }
QueryParamsMap qpm;
JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
return;
}
JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
- if (!resource) return;
+ if (!resource)
+ {
+ return;
+ }
OCRepresentation *representation = JniOcRepresentation::getOCRepresentationPtr(env, jRepresentation);
- if (!representation) return;
+ if (!representation)
+ {
+ return;
+ }
QueryParamsMap qpm;
JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
}
JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
- if (!resource) return;
+ if (!resource)
+ {
+ return;
+ }
OCRepresentation *representation = JniOcRepresentation::getOCRepresentationPtr(env, jRepresentation);
- if (!representation) return;
+ if (!representation)
+ {
+ return;
+ }
QueryParamsMap qpm;
JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
return;
}
JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
- if (!resource) return;
+ if (!resource)
+ {
+ return;
+ }
OCRepresentation *representation = JniOcRepresentation::getOCRepresentationPtr(env, jRepresentation);
- if (!representation) return;
+ if (!representation)
+ {
+ return;
+ }
QueryParamsMap qpm;
JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
return;
}
JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
- if (!resource) return;
+ if (!resource)
+ {
+ return;
+ }
OCRepresentation *representation = JniOcRepresentation::getOCRepresentationPtr(env, jRepresentation);
- if (!representation) return;
+ if (!representation)
+ {
+ return;
+ }
QueryParamsMap qpm;
JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
}
JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
- if (!resource) return;
+ if (!resource)
+ {
+ return;
+ }
OCRepresentation *representation = JniOcRepresentation::getOCRepresentationPtr(env, jRepresentation);
- if (!representation) return;
+ if (!representation)
+ {
+ return;
+ }
QueryParamsMap qpm;
JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
}
JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
- if (!resource) return;
+ if (!resource)
+ {
+ return;
+ }
OCRepresentation *representation = JniOcRepresentation::getOCRepresentationPtr(env, jRepresentation);
- if (!representation) return;
+ if (!representation)
+ {
+ return;
+ }
QueryParamsMap qpm;
JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
return;
}
JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
- if (!resource) return;
+ if (!resource)
+ {
+ return;
+ }
try
{
return;
}
JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
- if (!resource) return;
+ if (!resource)
+ {
+ return;
+ }
try
{
return;
}
JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
- if (!resource) return;
+ if (!resource)
+ {
+ return;
+ }
QueryParamsMap qpm;
JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
return;
}
JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
- if (!resource) return;
+ if (!resource)
+ {
+ return;
+ }
QueryParamsMap qpm;
JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
/*
* Class: org_iotivity_base_OcResource
-* Method: cancelObserve
-* Signature: ()V
-*/
-JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_cancelObserve
-(JNIEnv *env, jobject thiz)
-{
- LOGD("OcResource_cancelObserve");
- JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
- if (!resource) return;
-
- try
- {
- OCStackResult result = resource->cancelObserve(env);
-
- if (OC_STACK_OK != result)
- {
- ThrowOcException(result, "OcResource_cancelObserve");
- }
- }
- catch (OCException& e)
- {
- LOGE("%s", e.reason().c_str());
- ThrowOcException(e.code(), e.reason().c_str());
- }
-}
-
-/*
-* Class: org_iotivity_base_OcResource
* Method: cancelObserve1
* Signature: I)V
*/
{
LOGD("OcResource_cancelObserve1");
JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
- if (!resource) return;
+ if (!resource)
+ {
+ return;
+ }
try
{
return;
}
JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
- if (!resource) return;
+ if (!resource)
+ {
+ return;
+ }
HeaderOptions headerOptions;
JniUtils::convertJavaHeaderOptionsArrToVector(env, jheaderOptionArr, headerOptions);
{
LOGD("OcResource_unsetHeaderOptions");
JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
- if (!resource) return;
+ if (!resource)
+ {
+ return;
+ }
resource->unsetHeaderOptions();
}
{
LOGD("OcResource_getHost");
JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
- if (!resource) return nullptr;
+ if (!resource)
+ {
+ return nullptr;
+ }
return env->NewStringUTF(resource->host().c_str());
}
{
LOGD("OcResource_getUri");
JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
- if (!resource) return nullptr;
+ if (!resource)
+ {
+ return nullptr;
+ }
return env->NewStringUTF(resource->uri().c_str());
}
{
LOGD("OcResource_getConnectivityType");
JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
- if (!resource) return -1;
+ if (!resource)
+ {
+ return -1;
+ }
OCConnectivityType connectivityType = resource->connectivityType();
return static_cast<jint>(connectivityType);
{
LOGD("OcResource_isObservable");
JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+ if (!resource)
+ {
+ return false;
+ }
+
return (jboolean)resource->isObservable();
}
{
LOGD("OcResource_getResourceTypes");
JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
- if (!resource) return nullptr;
+ if (!resource)
+ {
+ return nullptr;
+ }
std::vector<std::string> resourceTypes = resource->getResourceTypes();
{
LOGD("OcResource_getResourceInterfaces");
JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
- if (!resource) return nullptr;
+ if (!resource)
+ {
+ return nullptr;
+ }
std::vector<std::string> resourceInterfaces = resource->getResourceInterfaces();
{
LOGD("OcResource_getUniqueIdentifier");
JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
- if (!resource) return nullptr;
+ if (!resource)
+ {
+ return nullptr;
+ }
JniOcResourceIdentifier *jniResourceIdentifier =
new JniOcResourceIdentifier(resource->uniqueIdentifier());
- if (!jniResourceIdentifier) return nullptr;
+ if (!jniResourceIdentifier)
+ {
+ return nullptr;
+ }
jlong handle = reinterpret_cast<jlong>(jniResourceIdentifier);
jobject jResourceIdentifier = env->NewObject(g_cls_OcResourceIdentifier,
{
LOGD("OcResource_getServerId");
JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
- if (!resource) return nullptr;
+ if (!resource)
+ {
+ return nullptr;
+ }
return env->NewStringUTF(resource->sid().c_str());
}
/*
* Class: org_iotivity_base_OcResource
+* Method: getDeviceName
+* Signature: ()Ljava/lang/String;
+*/
+JNIEXPORT jstring JNICALL Java_org_iotivity_base_OcResource_getDeviceName
+(JNIEnv *env, jobject thiz)
+{
+ LOGD("OcResource_getDeviceName");
+ JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+ if (!resource)
+ {
+ return nullptr;
+ }
+
+ return env->NewStringUTF(resource->deviceName().c_str());
+}
+
+/*
+* Class: org_iotivity_base_OcResource
* Method: dispose
* Signature: ()V
*/
LOGD("OcResource_dispose");
JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
delete resource;
-}
\ No newline at end of file
+}
+
+/*
+* Class: org_iotivity_base_OcResource
+* Method: discoveryMQTopicsImpl
+* Signature: (Ljava/util/Map;Lorg/iotivity/base/OcPlatform/OnResourceFoundListener;I)V
+*/
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_discoveryMQTopicsImpl
+(JNIEnv *env, jobject thiz, jobject jQueryParamsMap, jobject jListener, jint jQoS)
+{
+ LOGD("OcResource_discoveryMQTopicsImpl");
+
+#ifdef WITH_MQ
+ if (!jQueryParamsMap)
+ {
+ ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");
+ return;
+ }
+
+ if (!jListener)
+ {
+ ThrowOcException(OC_STACK_INVALID_PARAM, "listener cannot be null");
+ return;
+ }
+
+ JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+ if (!resource)
+ {
+ return;
+ }
+
+ QueryParamsMap qpm;
+ JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
+
+ try
+ {
+ OCStackResult result = resource->discoveryMQTopics(
+ env,
+ qpm,
+ jListener,
+ JniUtils::getQOS(env, static_cast<int>(jQoS)));
+
+ if (OC_STACK_OK != result)
+ {
+ ThrowOcException(result, "OcResource_discoveryMQTopicsImpl");
+ }
+ }
+ catch (OCException& e)
+ {
+ LOGE("%s", e.reason().c_str());
+ ThrowOcException(e.code(), e.reason().c_str());
+ }
+#else
+ ThrowOcException(JNI_NO_SUPPORT, "not support");
+#endif
+}
+
+/*
+* Class: org_iotivity_base_OcResource
+* Method: createMQTopicImpl
+* Signature: (Lorg/iotivity/base/OcRepresentation;Ljava/util/String;Ljava/util/Map
+* ;Lorg/iotivity/base/OcPlatform/OnMQTopicCreatedListener;I)V
+*/
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_createMQTopicImpl
+(JNIEnv *env, jobject thiz, jobject jRepresentation, jstring jUri,
+ jobject jQueryParamsMap, jobject jListener, jint jQoS)
+{
+ LOGD("OcResource_createMQTopicImpl");
+
+#ifdef WITH_MQ
+ if (!jQueryParamsMap)
+ {
+ ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");
+ return;
+ }
+
+ if (!jListener)
+ {
+ ThrowOcException(OC_STACK_INVALID_PARAM, "listener cannot be null");
+ return;
+ }
+
+ if (!jRepresentation)
+ {
+ ThrowOcException(OC_STACK_INVALID_PARAM, "representation null");
+ return;
+ }
+
+ JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+ if (!resource)
+ {
+ return;
+ }
+
+ std::string targetUri;
+ if (jUri)
+ {
+ targetUri = env->GetStringUTFChars(jUri, nullptr);
+ }
+
+ OCRepresentation *representation = JniOcRepresentation::getOCRepresentationPtr(env,
+ jRepresentation);
+ if (!representation)
+ {
+ return;
+ }
+
+ QueryParamsMap qpm;
+ JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
+
+ try
+ {
+ OCStackResult result = resource->createMQTopic(
+ env,
+ *representation,
+ targetUri,
+ qpm,
+ jListener,
+ JniUtils::getQOS(env, static_cast<int>(jQoS)));
+
+ if (OC_STACK_OK != result)
+ {
+ ThrowOcException(result, "OcResource_createMQTopicImpl");
+ }
+ }
+ catch (OCException& e)
+ {
+ LOGE("%s", e.reason().c_str());
+ ThrowOcException(e.code(), e.reason().c_str());
+ }
+#else
+ ThrowOcException(JNI_NO_SUPPORT, "not support");
+#endif
+}
+
+/*
+* Class: org_iotivity_base_OcResource
+* Method: subscribeMQTopic
+* Signature: (Ljava/util/Map;Lorg/iotivity/base/OcResource/OnObserveListener;I)V
+*/
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_subscribeMQTopicImpl
+(JNIEnv *env, jobject thiz, jobject jQueryParamsMap, jobject jListener, jint jQoS)
+{
+ LOGD("OcResource_subscribeMQTopicImpl");
+#ifdef MQ_SUBSCRIBER
+ if (!jQueryParamsMap)
+ {
+ ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");
+ return;
+ }
+ if (!jListener)
+ {
+ ThrowOcException(OC_STACK_INVALID_PARAM, "onObserveListener cannot be null");
+ return;
+ }
+ JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+ if (!resource)
+ {
+ return;
+ }
+
+ QueryParamsMap qpm;
+ JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
+
+ try
+ {
+ OCStackResult result = resource->subscribeMQTopic(
+ env,
+ qpm,
+ jListener,
+ JniUtils::getQOS(env, static_cast<int>(jQoS)));
+
+ if (OC_STACK_OK != result)
+ {
+ ThrowOcException(result, "OcResource_subscribeMQTopicImpl");
+ }
+ }
+ catch (OCException& e)
+ {
+ LOGE("%s", e.reason().c_str());
+ ThrowOcException(e.code(), e.reason().c_str());
+ }
+#else
+ ThrowOcException(JNI_NO_SUPPORT, "not support");
+#endif
+}
+
+/*
+* Class: org_iotivity_base_OcResource
+* Method: unsubscribeMQTopicImpl
+* Signature: (I)V
+*/
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_unsubscribeMQTopicImpl
+(JNIEnv *env, jobject thiz, jint jQoS)
+{
+ LOGD("OcResource_unsubscribeMQTopicImpl");
+#ifdef MQ_SUBSCRIBER
+ JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+ if (!resource)
+ {
+ return;
+ }
+
+ try
+ {
+ OCStackResult result = resource->unsubscribeMQTopic(
+ JniUtils::getQOS(env, static_cast<int>(jQoS)));
+ if (OC_STACK_OK != result)
+ {
+ ThrowOcException(result, "OcResource_unsubscribeMQTopicImpl");
+ }
+ }
+ catch (OCException& e)
+ {
+ LOGE("%s", e.reason().c_str());
+ ThrowOcException(e.code(), e.reason().c_str());
+ }
+#else
+ ThrowOcException(JNI_NO_SUPPORT, "not support");
+#endif
+}
+
+/*
+* Class: org_iotivity_base_OcResource
+* Method: requestMQPublishImpl
+* Signature: (Ljava/util/Map;Lorg/iotivity/base/OcResource/OnPostListener;I)V
+*/
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_requestMQPublishImpl
+(JNIEnv *env, jobject thiz, jobject jQueryParamsMap, jobject jListener, jint jQoS)
+{
+ LOGD("OcResource_requestMQPublishImpl");
+#ifdef MQ_SUBSCRIBER
+ if (!jQueryParamsMap)
+ {
+ ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");
+ return;
+ }
+ if (!jListener)
+ {
+ ThrowOcException(OC_STACK_INVALID_PARAM, "onPostListener cannot be null");
+ return;
+ }
+
+ JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+ if (!resource)
+ {
+ return;
+ }
+
+ QueryParamsMap qpm;
+ JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
+
+ try
+ {
+ OCStackResult result = resource->requestMQPublish(
+ env,
+ qpm,
+ jListener,
+ JniUtils::getQOS(env, static_cast<int>(jQoS)));
+
+ if (OC_STACK_OK != result)
+ {
+ ThrowOcException(result, "OcResource_requestMQPublishImpl");
+ }
+ }
+ catch (OCException& e)
+ {
+ LOGE("%s", e.reason().c_str());
+ ThrowOcException(e.code(), e.reason().c_str());
+ }
+#else
+ ThrowOcException(JNI_NO_SUPPORT, "not support");
+#endif
+}
+
+/*
+* Class: org_iotivity_base_OcResource
+* Method: publishMQTopicImpl
+* Signature: (Lorg/iotivity/base/OcRepresentation;Ljava/util/Map;
+* Lorg/iotivity/base/OcResource/OnPostListener;I)V
+*/
+JNIEXPORT void JNICALL Java_org_iotivity_base_OcResource_publishMQTopicImpl
+(JNIEnv *env, jobject thiz, jobject jRepresentation, jobject jQueryParamsMap,
+ jobject jListener, jint jQoS)
+{
+ LOGD("OcResource_publishMQTopicImpl");
+#ifdef MQ_PUBLISHER
+ if (!jRepresentation)
+ {
+ ThrowOcException(OC_STACK_INVALID_PARAM, "representation cannot be null");
+ return;
+ }
+
+ if (!jQueryParamsMap)
+ {
+ ThrowOcException(OC_STACK_INVALID_PARAM, "queryParamsMap cannot be null");
+ return;
+ }
+
+ if (!jListener)
+ {
+ ThrowOcException(OC_STACK_INVALID_PARAM, "onPostListener cannot be null");
+ return;
+ }
+
+ JniOcResource *resource = JniOcResource::getJniOcResourcePtr(env, thiz);
+ if (!resource)
+ {
+ return;
+ }
+
+ OCRepresentation *representation = JniOcRepresentation::getOCRepresentationPtr(env,
+ jRepresentation);
+ if (!representation)
+ {
+ return;
+ }
+
+ QueryParamsMap qpm;
+ JniUtils::convertJavaMapToQueryParamsMap(env, jQueryParamsMap, qpm);
+
+ try
+ {
+ OCStackResult result = resource->publishMQTopic(
+ env,
+ *representation,
+ qpm,
+ jListener,
+ JniUtils::getQOS(env, static_cast<int>(jQoS)));
+
+ if (OC_STACK_OK != result)
+ {
+ ThrowOcException(result, "OcResource_publishMQTopicImpl");
+ }
+ }
+ catch (OCException& e)
+ {
+ LOGE("%s", e.reason().c_str());
+ ThrowOcException(e.code(), e.reason().c_str());
+ }
+#else
+ ThrowOcException(JNI_NO_SUPPORT, "not support");
+#endif
+}