Add logic for addTopic.
authorjaesick.shin <jaesick.shin@samsung.com>
Thu, 11 Aug 2016 11:02:36 +0000 (20:02 +0900)
committerMadan Lanka <lanka.madan@samsung.com>
Thu, 11 Aug 2016 14:33:25 +0000 (14:33 +0000)
this patch included
Added topics store to cache.

Change-Id: I766f566b406d4697b99d01b1b859d54fcfd9ad03
Signed-off-by: jaesick.shin <jaesick.shin@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/10269
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Madan Lanka <lanka.madan@samsung.com>
service/notification/src/provider/NSProviderInterface.c
service/notification/src/provider/NSProviderMemoryCache.c
service/notification/src/provider/NSProviderTopic.c

index 785a51f..4f09c91 100644 (file)
@@ -271,7 +271,7 @@ NSResult NSProviderAddTopic(char *topicName)
     NS_LOG(DEBUG, "NSProviderAddTopics - IN");\r
     pthread_mutex_lock(&nsInitMutex);\r
 \r
-    NSPushQueue(TOPIC_SCHEDULER, TASK_ADD_TOPIC, topicName);\r
+    NSPushQueue(TOPIC_SCHEDULER, TASK_ADD_TOPIC, OICStrdup(topicName));\r
 \r
     pthread_mutex_unlock(&nsInitMutex);\r
     NS_LOG(DEBUG, "NSProviderAddTopics - OUT");\r
index 8be56ba..f3c1d72 100644 (file)
@@ -193,6 +193,20 @@ NSResult NSStorageWrite(NSCacheList * list, NSCacheElement * newObj)
         }\r
 \r
     }\r
+    else if(type == NS_PROVIDER_CACHE_REGISTER_TOPIC)\r
+    {\r
+        NS_LOG(DEBUG, "Type is REGITSTER TOPIC");\r
+\r
+        NSCacheTopicData * topicData = (NSCacheTopicData *) newObj->data;\r
+        NSCacheElement * it = NSStorageRead(list, topicData->topicName);\r
+\r
+        if (it)\r
+        {\r
+            NS_LOG(DEBUG, "already registered for topic name");\r
+            pthread_mutex_unlock(&NSCacheMutex);\r
+            return NS_FAIL;\r
+        }\r
+    }\r
 \r
     if (list->head == NULL)\r
     {\r
@@ -239,12 +253,13 @@ bool NSProviderCompareIdCacheData(NSCacheType type, void * data, const char * id
         return false;\r
     }\r
 \r
+    NS_LOG_V(DEBUG, "Data(compData) = [%s]", id);\r
+\r
     if (type == NS_PROVIDER_CACHE_SUBSCRIBER)\r
     {\r
         NSCacheSubData * subData = (NSCacheSubData *) data;\r
 \r
         NS_LOG_V(DEBUG, "Data(subData) = [%s]", subData->id);\r
-        NS_LOG_V(DEBUG, "Data(compData) = [%s]", id);\r
 \r
         if (strcmp(subData->id, id) == 0)\r
         {\r
@@ -254,11 +269,24 @@ bool NSProviderCompareIdCacheData(NSCacheType type, void * data, const char * id
 \r
         NS_LOG(DEBUG, "Message Data is Not Same");\r
         return false;\r
+    }\r
+    else if (type == NS_PROVIDER_CACHE_REGISTER_TOPIC)\r
+    {\r
+        NSCacheTopicData * topicData = (NSCacheTopicData *) data;\r
+\r
+        NS_LOG_V(DEBUG, "Data(topicData) = [%s]", topicData->topicName);\r
+\r
+        if (strcmp(topicData->topicName, id) == 0)\r
+        {\r
+            NS_LOG(DEBUG, "SubData is Same");\r
+            return true;\r
+        }\r
 \r
+        NS_LOG(DEBUG, "Message Data is Not Same");\r
+        return false;\r
     }\r
 \r
     NS_LOG(DEBUG, "NSProviderCompareIdCacheData - OUT");\r
-\r
     return false;\r
 }\r
 \r
index f30df90..08835c2 100644 (file)
@@ -22,6 +22,9 @@
 \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
@@ -65,65 +68,25 @@ NSTopicList * NSGetTopics(char *consumerId)
     return topicList;\r
 }\r
 \r
-//TODO: update parameter\r
-NSResult NSStoreTopics(char *consumerId, NSTopics** topics)\r
+NSResult NSStoreTopics(const char * topicName)\r
 {\r
     NS_LOG(DEBUG, "NSWriteTopicsToStorage()");\r
 \r
-    if(!consumerId)\r
-    {\r
-        NS_LOG(DEBUG, "Store registered topic list");\r
-        //TODO: store registered topic list\r
-    }\r
-    else // topic selection for consumer\r
-    {\r
-        NS_LOG(DEBUG, "Store subscribed topic list");\r
-        //TODO: store subscribed topic list for consumer\r
-\r
-        //TODO: modiy caching logic\r
-        NSCacheElement * element = (NSCacheElement *) OICMalloc(sizeof(NSCacheElement));\r
-        NSCacheTopicData * topicData = (NSCacheTopicData *) OICMalloc(sizeof(NSCacheTopicData));\r
-\r
-        OICStrcpy(topicData->consumerId, UUID_STRING_SIZE, consumerId);\r
-        NS_LOG_V(DEBUG, "consumer id: %s", topicData->consumerId);\r
-\r
-        // TODO: print topic list\r
-        topicData->topics = topics;\r
-        NS_LOG(DEBUG, "print topic list");\r
+    NSCacheTopicData * data = (NSCacheTopicData *)OICMalloc(sizeof(NSCacheTopicData));\r
+    data->topicName = topicName;\r
+    data->state = NS_TOPIC_UNSUBSCRIBED;\r
 \r
-        element->data = (void*) topicData;\r
-        element->next = NULL;\r
-\r
-        if(NSStorageWrite(consumerTopicList, element) != NS_OK)\r
-        {\r
-            NS_LOG(DEBUG, "fail to write cache");\r
-        }\r
-    }\r
-\r
-    NS_LOG(DEBUG, "NSWriteTopicsToStorage() NS_OK");\r
-    return NS_OK;\r
-}\r
+    NSCacheElement * element = (NSCacheElement *) OICMalloc(sizeof(NSCacheElement));\r
+    element->data = (void *) data;\r
+    element->next = NULL;\r
 \r
-NSResult NSRegisterTopicList(NSTopicList *topicList)\r
-{\r
-    NS_LOG(DEBUG, "NSRegisterTopicList()");\r
-\r
-    if(!topicList)\r
+    if(NSStorageWrite(registeredTopicList, element) != NS_OK)\r
     {\r
-        NS_LOG(ERROR, "no topics");\r
-        return NS_ERROR;\r
+        NS_LOG(DEBUG, "fail to write cache");\r
     }\r
+    NSSendTopicUpdation();\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
-    NSStoreTopics(NULL, topicList->head);\r
-\r
-    NS_LOG(DEBUG, "NSRegisterTopicList() NS_OK");\r
+    NS_LOG(DEBUG, "NSWriteTopicsToStorage() NS_OK");\r
     return NS_OK;\r
 }\r
 \r
@@ -150,7 +113,8 @@ NSResult NSSubscribeTopicList(char *consumerId, NSTopicList *topicList)
         return NS_ERROR;\r
     }\r
 \r
-    NSStoreTopics(consumerId, topicList->head);\r
+    //TODO it will change logic.\r
+    //NSStoreTopics(consumerId, topicList->head);\r
 \r
     NS_LOG(DEBUG, "NSSubscribeTopicList() NS_OK");\r
     return NS_OK;\r
@@ -389,12 +353,10 @@ void * NSTopicSchedule(void * ptr)
                     // TODO: implement\r
                     break;\r
                 case TASK_ADD_TOPIC:\r
-                    // TODO: modify to add single topic\r
+                {\r
                     NS_LOG(DEBUG, "CASE TASK_ADD_TOPIC : ");\r
-                    NSTopicList * registeredTopicList = (NSTopicList *) node->taskData;\r
-                    NSRegisterTopicList(registeredTopicList);\r
-                    NSSendTopicUpdation();\r
-                    // TODO : free NSTopic\r
+                    NSStoreTopics((const char *) node->taskData);\r
+                }\r
                     break;\r
                 case TASK_DELETE_TOPIC:\r
                     // TODO: implement \r