//-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
#include "NSProviderNotification.h"
-
-NSResult NSInitMessageList()
-{
- NS_LOG(DEBUG, "NSInitMessageList - IN");
-
- messageList = NSStorageCreate();
- messageList->cacheType = NS_PROVIDER_CACHE_MESSAGE;
-
- NS_LOG(DEBUG, "NSInitMessageList - OUT");
- return NS_OK;
-}
+#include "NSProviderListener.h"
+#include "NSProviderSystem.h"
NSResult NSSetMessagePayload(NSMessage *msg, OCRepPayload** msgPayload)
{
NS_LOG(DEBUG, "NSSetMessagePayload - IN");
- *msgPayload = OCRepPayloadCreate();
+ *msgPayload = msg->extraInfo != NULL ? msg->extraInfo : OCRepPayloadCreate();
if (!*msgPayload)
{
OCRepPayloadSetPropString(*msgPayload, NS_ATTRIBUTE_PROVIDER_ID, msg->providerId);
NSDuplicateSetPropertyInt(msgPayload, NS_ATTRIBUTE_TYPE, msg->type);
- NSDuplicateSetPropertyInt(msgPayload, NS_ATTRIBUTE_MESSAGE_ID, msg->ttl);
+ NSDuplicateSetPropertyInt(msgPayload, NS_ATTRIBUTE_TTL, msg->ttl);
NSDuplicateSetPropertyString(msgPayload, NS_ATTRIBUTE_DATETIME, msg->dateTime);
NSDuplicateSetPropertyString(msgPayload, NS_ATTRIBUTE_TITLE, msg->title);
NSDuplicateSetPropertyString(msgPayload, NS_ATTRIBUTE_TEXT, msg->contentText);
NSDuplicateSetPropertyString(msgPayload, NS_ATTRIBUTE_SOURCE, msg->sourceName);
NSDuplicateSetPropertyString(msgPayload, NS_ATTRIBUTE_TOPIC_NAME, msg->topic);
+ if (msg->mediaContents)
+ {
+ NSDuplicateSetPropertyString(msgPayload, NS_ATTRIBUTE_ICON_IMAGE,
+ msg->mediaContents->iconImage);
+ }
+
NS_LOG(DEBUG, "NSSetMessagePayload - OUT");
return NS_OK;
}
return NS_OK;
}
+#ifdef WITH_MQ
+OCStackResult NSProviderPublishTopic(OCRepPayload * payload, OCClientResponseHandler response)
+{
+ NS_LOG(DEBUG, "NSProviderPublishTopic - IN");
+ OCCallbackData cbData;
+ memset(&cbData, 0, sizeof(OCCallbackData));
+ cbData.cb = response;
+ cbData.cd = NULL;
+ cbData.context = NULL;
+
+ NSMQServerInfo * serverInfo = NSGetMQServerInfo();
+
+ if (!serverInfo)
+ {
+ NS_LOG(DEBUG, "serverInfo is not NULL");
+ NS_LOG_V(DEBUG, "serverInfo->serverUri = %s", serverInfo->serverUri);
+ }
+
+ NS_LOG(DEBUG, "NSProviderPublishTopic - OUT");
+
+ return OCDoResource(NULL, OC_REST_POST, serverInfo->serverUri, serverInfo->devAddr,
+ (OCPayload *)payload, CT_ADAPTER_TCP, OC_LOW_QOS, &cbData, NULL, 0);
+}
+#endif
+
NSResult NSSendNotification(NSMessage *msg)
{
NS_LOG(DEBUG, "NSSendMessage - IN");
return NS_ERROR;
}
- if (consumerSubList->head == NULL)
+ OCRepPayload* payload = NULL;
+
+ if (NSSetMessagePayload(msg, &payload) != NS_OK)
{
- NS_LOG(ERROR, "SubList->head is NULL, empty SubList");
+ NS_LOG(ERROR, "fail to Get message payload");
return NS_ERROR;
}
- OCRepPayload* payload = NULL;
+#ifdef WITH_MQ
+ if (NSGetMQServerInfo())
+ {
+ NSProviderPublishTopic(OCRepPayloadClone(payload), NSProviderPublishMQResponseCB);
+ }
+#endif
- if (NSSetMessagePayload(msg, &payload) != NS_OK)
+ if (consumerSubList->head == NULL)
{
- NS_LOG(ERROR, "fail to Get message payload");
+ NS_LOG(ERROR, "SubList->head is NULL, empty SubList");
+ OCRepPayloadDestroy(payload);
+ msg->extraInfo = NULL;
return NS_ERROR;
}
while (it)
{
NSCacheSubData * subData = (NSCacheSubData *) it->data;
- NS_LOG_V(DEBUG, "message subData->id = %s", subData->id);
+ NS_LOG_V(INFO_PRIVATE, "message subData->id = %s", subData->id);
NS_LOG_V(DEBUG, "subData->messageId = %d", subData->messageObId);
NS_LOG_V(DEBUG, "subData->cloud_messageId = %d", subData->remote_messageObId);
NS_LOG_V(DEBUG, "subData->syncId = %d", subData->syncObId);
{
if(subData->messageObId != 0)
{
- if(msg->topic)
+ if (msg->topic && (msg->topic)[0] != '\0')
{
NS_LOG_V(DEBUG, "this is topic message: %s", msg->topic);
- if(NSIsTopicSubscribed(subData->id, msg->topic))
+ if (NSProviderIsTopicSubScribed(consumerTopicList->head, subData->id, msg->topic))
{
obArray[obCount++] = subData->messageObId;
}
}
}
-#ifdef WITH_CLOUD
- if(subData->remote_messageObId != 0)
+#if (defined WITH_CLOUD)
+ if (subData->remote_messageObId != 0)
{
- if(NSIsTopicSubscribed(subData->id, msg->topic))
+ if (msg->topic && (msg->topic)[0] != '\0')
{
- obArray[obCount++] = subData->remote_messageObId;
+ NS_LOG_V(DEBUG, "this is topic message via remote server: %s", msg->topic);
+ if (NSProviderIsTopicSubScribed(consumerTopicList->head, subData->id, msg->topic))
+ {
+ obArray[obCount++] = subData->remote_messageObId;
+ }
}
else
{
NS_LOG(DEBUG, "-------------------------------------------------------message\n");
}
- if(!obCount)
+ if (!obCount)
{
NS_LOG(ERROR, "observer count is zero");
+ OCRepPayloadDestroy(payload);
+ msg->extraInfo = NULL;
return NS_ERROR;
}
OCStackResult ocstackResult = OCNotifyListOfObservers(rHandle, obArray, obCount, payload,
- OC_HIGH_QOS);
+ OC_LOW_QOS);
NS_LOG_V(DEBUG, "Message ocstackResult = %d", ocstackResult);
{
NS_LOG(ERROR, "fail to send message");
OCRepPayloadDestroy(payload);
+ msg->extraInfo = NULL;
return NS_ERROR;
}
OCRepPayloadDestroy(payload);
+ msg->extraInfo = NULL;
NS_LOG(DEBUG, "NSSendMessage - OUT");
-
return NS_OK;
}
while (it)
{
NSCacheSubData * subData = (NSCacheSubData *) it->data;
- NS_LOG_V(DEBUG, "sync subData->id = %s", subData->id);
+ NS_LOG_V(INFO_PRIVATE, "sync subData->id = %s", subData->id);
NS_LOG_V(DEBUG, "subData->messageId = %d", subData->messageObId);
NS_LOG_V(DEBUG, "subData->cloud_messageId = %d", subData->remote_messageObId);
NS_LOG_V(DEBUG, "subData->syncId = %d", subData->syncObId);
if (subData->isWhite)
{
- if(subData->syncObId != 0)
+ if (subData->syncObId != 0)
{
obArray[obCount++] = subData->syncObId;
}
-#ifdef WITH_CLOUD
- if(subData->remote_syncObId != 0)
+#if (defined WITH_CLOUD)
+ if (subData->remote_syncObId != 0)
{
obArray[obCount++] = subData->remote_syncObId;
}
it = it->next;
}
- OCRepPayload* payload;
+ OCRepPayload* payload = NULL;
if (NSSetSyncPayload(sync, &payload) != NS_OK)
{
NS_LOG(ERROR, "Failed to allocate payload");
return NS_ERROR;
}
+#ifdef WITH_MQ
+ if (NSGetMQServerInfo())
+ {
+ OCRepPayload* MQPayload = OCRepPayloadClone(payload);
+ NSMessageType MQType = 0;
+
+ if (sync->state == NS_SYNC_READ)
+ {
+ MQType = NS_MESSAGE_READ;
+ }
+ else if (sync->state == NS_SYNC_DELETED)
+ {
+ MQType = NS_MESSAGE_DELETED;
+ }
+
+ OCRepPayloadSetPropInt(MQPayload, NS_ATTRIBUTE_TYPE, (int64_t) MQType);
+ NSProviderPublishTopic(MQPayload, NSProviderPublishMQResponseCB);
+ }
+#endif
+
for (i = 0; i < obCount; ++i)
{
NS_LOG(DEBUG, "-------------------------------------------------------message\n");
}
OCStackResult ocstackResult = OCNotifyListOfObservers(rHandle, obArray,
- obCount, payload, OC_HIGH_QOS);
+ obCount, payload, OC_LOW_QOS);
NS_LOG_V(DEBUG, "Sync ocstackResult = %d", ocstackResult);
-
if (ocstackResult != OC_STACK_OK)
{
NS_LOG(ERROR, "fail to send Sync");
break;
}
- OICFree(node);
+ NSOICFree(node);
}
pthread_mutex_unlock(&NSMutex[NOTIFICATION_SCHEDULER]);
-
}
NS_LOG(INFO, "Destroy NSNotificationSchedule");