\r
#include "NSProviderTopic.h"\r
\r
-static bool isTopicList = false;\r
-\r
-NSResult NSStoreTopics(const char * topicName);\r
NSResult NSSendTopicUpdation();\r
\r
NSResult NSInitTopicList()\r
{\r
NS_LOG(DEBUG, "NSInitTopicList - IN");\r
-\r
- if(isTopicList)\r
- {\r
- NS_LOG(DEBUG, "topic list has already initiated");\r
- return NS_FAIL;\r
- }\r
-\r
consumerTopicList = NSStorageCreate();\r
consumerTopicList->cacheType = NS_PROVIDER_CACHE_CONSUMER_TOPIC_NAME;\r
\r
registeredTopicList = NSStorageCreate();\r
registeredTopicList->cacheType = NS_PROVIDER_CACHE_REGISTER_TOPIC;\r
\r
- isTopicList = true;\r
-\r
NS_LOG(DEBUG, "NSInitTopicList - OUT");\r
return NS_OK;\r
}\r
\r
-NSTopicList * NSGetTopics(char *consumerId)\r
-{\r
- NS_LOG(DEBUG, "NSGetTopics()");\r
-\r
- NSTopicList * topicList;\r
-\r
- if(consumerId == NULL)\r
- {\r
- NS_LOG(DEBUG, "All registered topic list");\r
- //TODO: get registered topic list\r
- }\r
- else\r
- {\r
- NS_LOG_V(DEBUG, "Subscribed topic list for consumerId(%s)", consumerId);\r
- //TODO: get subscribed topic list for consumer\r
- }\r
-\r
- NS_LOG(DEBUG, "NSGetTopics() NS_OK");\r
- return topicList;\r
-}\r
-\r
NSResult NSAddTopics(const char * topicName)\r
{\r
NS_LOG(DEBUG, "NSWriteTopicsToStorage()");\r
\r
NSStorageDelete(registeredTopicList, topicName);\r
while(NSStorageDelete(consumerTopicList, topicName) != NS_FAIL);\r
-\r
- return NS_OK;\r
-}\r
-\r
-NSResult NSSubscribeTopicList(char *consumerId, NSTopicList *topicList)\r
-{\r
- NS_LOG(DEBUG, "NSSubscribeTopicList()");\r
-\r
- if(!topicList)\r
- {\r
- NS_LOG(ERROR, "no topics");\r
- return NS_ERROR;\r
- }\r
-\r
- if(!consumerId)\r
- {\r
- NS_LOG(ERROR, "invalid consumer id");\r
- return NS_ERROR;\r
- }\r
-\r
- OCResourceHandle rHandle = NULL;\r
- if(NSPutTopicResource(topicList, &rHandle) != NS_OK)\r
- {\r
- NS_LOG(ERROR, "Fail to put topic resource");\r
- return NS_ERROR;\r
- }\r
-\r
- //TODO it will change logic.\r
- //NSStoreTopics(consumerId, topicList->head);\r
-\r
- NS_LOG(DEBUG, "NSSubscribeTopicList() NS_OK");\r
return NS_OK;\r
}\r
\r
NS_LOG(DEBUG, "NSSendTopicList - IN");\r
\r
char * id = NSGetValueFromQuery(OICStrdup(entityHandlerRequest->query), NS_QUERY_CONSUMER_ID);\r
+ NSTopicLL * topics = NULL;\r
+ NSCacheElement * currList = NULL;\r
+\r
if(!id)\r
{\r
NS_LOG(DEBUG, "Send registered topic list");\r
- //TODO: get registered topic list\r
- // NSGetTopics(NULL);\r
+ topics = NSProviderGetTopicsCacheData(registeredTopicList);\r
+ currList = registeredTopicList->head;\r
}\r
else\r
{\r
NS_LOG(DEBUG, "Send subscribed topic list to consumer");\r
- //TODO: get subscribed topic list for consumer\r
- // NSGetTopics(consumerid);\r
+ topics = NSProviderGetConsumerTopicsCacheData(consumerTopicList, id);\r
+ currList = consumerTopicList->head;\r
}\r
\r
// make response for the Get Request\r
}\r
\r
// set topics to the array of resource property\r
- const int TOPIC_MAX_SIZE = 100;\r
- int dimensions = 0;\r
- OCRepPayload* payloadTopicArray[TOPIC_MAX_SIZE];\r
- //TODO: use while(NSTopicList)\r
- OCRepPayload* payloadTopic1;\r
- OCRepPayload* payloadTopic2;\r
\r
- OCRepPayloadSetPropString(payloadTopic1, NS_ATTRIBUTE_TOPIC_NAME, "test topic name1");\r
- OCRepPayloadSetPropBool(payloadTopic1, NS_ATTRIBUTE_TOPIC_SELECTION, true);\r
+ NSCacheElement * iter = currList;\r
+ size_t dimensionSize = (size_t)NSProviderGetListSize(iter);\r
+\r
+ if(!dimensionSize)\r
+ {\r
+ return NS_ERROR;\r
+ }\r
+\r
+ OCRepPayload** payloadTopicArray = (OCRepPayload **) OICMalloc(\r
+ sizeof(OCRepPayload *) * dimensionSize);\r
+\r
+ size_t dimensions[3] = {dimensionSize, 0, 0};\r
+ for (int i = 0; i < (int)dimensionSize; i++)\r
+ {\r
+ NSTopicLL * topic = (NSTopicLL *) iter->data;\r
\r
- OCRepPayloadSetPropString(payloadTopic2, NS_ATTRIBUTE_TOPIC_NAME, "test topic name2");\r
- OCRepPayloadSetPropBool(payloadTopic2, NS_ATTRIBUTE_TOPIC_SELECTION, false);\r
+ payloadTopicArray[i] = OCRepPayloadCreate();\r
+ OCRepPayloadSetPropString(payloadTopicArray[i], NS_ATTRIBUTE_TOPIC_NAME, topic->topicName);\r
+ OCRepPayloadSetPropInt(payloadTopicArray[i], NS_ATTRIBUTE_TOPIC_SELECTION,\r
+ (int)topic->state);\r
\r
- payloadTopicArray[dimensions++] = payloadTopic1;\r
- payloadTopicArray[dimensions++] = payloadTopic2;\r
- // end of set topics\r
+ iter = iter->next;\r
+ }\r
\r
OCRepPayloadSetUri(payload, NS_COLLECTION_TOPIC_URI);\r
OCRepPayloadSetPropString(payload, NS_ATTRIBUTE_CONSUMER_ID, id);\r
- // TODO: add PayLoadSet with topic list got above\r
- OCRepPayloadSetPropObjectArray(payload, NS_ATTRIBUTE_TOPIC_LIST, (const OCRepPayload**)(payloadTopicArray), dimensions);\r
+ OCRepPayloadSetPropObjectArray(payload, NS_ATTRIBUTE_TOPIC_LIST,\r
+ (const OCRepPayload**)(payloadTopicArray), dimensions);\r
\r
response.requestHandle = entityHandlerRequest->requestHandle;\r
response.resourceHandle = entityHandlerRequest->resource;\r
response.ehResult = OC_EH_OK;\r
response.payload = (OCPayload *) payload;\r
\r
- // Send Response\r
if (OCDoResponse(&response) != OC_STACK_OK)\r
{\r
NS_LOG(ERROR, "Fail to response topic list");\r
return true;\r
}\r
\r
+NSResult NSPostConsumerTopics(OCEntityHandlerRequest * entityHandlerRequest)\r
+{\r
+ NS_LOG(DEBUG, "NSPostConsumerTopics() - IN");\r
+\r
+ char * consumerId = NULL;\r
+ OCRepPayload * payload = entityHandlerRequest->payload;\r
+ OCRepPayloadGetPropString(payload, NS_ATTRIBUTE_CONSUMER_ID, &consumerId);\r
+\r
+ if(!consumerId)\r
+ {\r
+ NS_LOG(DEBUG, "Invalid consumer ID");\r
+ return NS_ERROR;\r
+ }\r
+\r
+ OCRepPayload ** topicListPayload = NULL;\r
+ OCRepPayloadValue * payloadValue = NULL;\r
+ payloadValue = NSPayloadFindValue(payload, NS_ATTRIBUTE_TOPIC_LIST);\r
+ size_t dimensionSize = calcDimTotal(payloadValue->arr.dimensions);\r
+ size_t dimensions[3] = {dimensionSize, 0, 0};\r
+ OCRepPayloadGetPropObjectArray(payload, NS_ATTRIBUTE_TOPIC_LIST, & topicListPayload, dimensions);\r
+\r
+ for(int i = 0; i <(int)dimensionSize; i++)\r
+ {\r
+ char * topicName = NULL;\r
+ int topicState = 0;\r
+\r
+ OCRepPayloadGetPropString(topicListPayload[i], NS_ATTRIBUTE_TOPIC_NAME, &topicName);\r
+ OCRepPayloadGetPropInt(topicListPayload[i], NS_ATTRIBUTE_TOPIC_SELECTION, &topicState);\r
+ NS_LOG_V(DEBUG, "Topic Name(state): %s(%d)", topicName, topicState);\r
+\r
+ if(NS_TOPIC_SUBSCRIBED == (NSTopicState)topicState)\r
+ {\r
+ NSCacheTopicSubData * topicSubData =\r
+ (NSCacheTopicSubData *) OICMalloc(sizeof(NSCacheTopicSubData));\r
+\r
+ OICStrcpy(topicSubData->id, NS_UUID_STRING_SIZE, consumerId);\r
+ topicSubData->topicName = OICStrdup(topicName);\r
+\r
+ NSCacheElement * newObj = (NSCacheElement *) OICMalloc(sizeof(NSCacheElement));\r
+ newObj->data = (NSCacheData *) topicSubData;\r
+ newObj->next = NULL;\r
+ NSStorageWrite(consumerTopicList, newObj);\r
+ }\r
+ }\r
+\r
+ NS_LOG(DEBUG, "NSPostConsumerTopics() - OUT");\r
+ return NS_OK;\r
+}\r
+\r
void * NSTopicSchedule(void * ptr)\r
{\r
if (ptr == NULL)\r
NSDeleteTopics((const char *) node->taskData);\r
}\r
break;\r
+ case TASK_POST_TOPIC:\r
+ {\r
+ NS_LOG(DEBUG, "TASK_POST_TOPIC : ");\r
+ NSPostConsumerTopics((OCEntityHandlerRequest*) node->taskData);\r
+ }\r
+ break;\r
default:\r
break;\r
}\r