From 107380388681e564751cb3ddf7deebf19e660ec0 Mon Sep 17 00:00:00 2001 From: "jaesick.shin" Date: Thu, 11 Aug 2016 20:02:36 +0900 Subject: [PATCH] Add logic for addTopic. this patch included Added topics store to cache. Change-Id: I766f566b406d4697b99d01b1b859d54fcfd9ad03 Signed-off-by: jaesick.shin Reviewed-on: https://gerrit.iotivity.org/gerrit/10269 Tested-by: jenkins-iotivity Reviewed-by: Madan Lanka --- .../src/provider/NSProviderInterface.c | 2 +- .../src/provider/NSProviderMemoryCache.c | 32 ++++++++- .../notification/src/provider/NSProviderTopic.c | 76 ++++++---------------- 3 files changed, 50 insertions(+), 60 deletions(-) diff --git a/service/notification/src/provider/NSProviderInterface.c b/service/notification/src/provider/NSProviderInterface.c index 785a51f..4f09c91 100644 --- a/service/notification/src/provider/NSProviderInterface.c +++ b/service/notification/src/provider/NSProviderInterface.c @@ -271,7 +271,7 @@ NSResult NSProviderAddTopic(char *topicName) NS_LOG(DEBUG, "NSProviderAddTopics - IN"); pthread_mutex_lock(&nsInitMutex); - NSPushQueue(TOPIC_SCHEDULER, TASK_ADD_TOPIC, topicName); + NSPushQueue(TOPIC_SCHEDULER, TASK_ADD_TOPIC, OICStrdup(topicName)); pthread_mutex_unlock(&nsInitMutex); NS_LOG(DEBUG, "NSProviderAddTopics - OUT"); diff --git a/service/notification/src/provider/NSProviderMemoryCache.c b/service/notification/src/provider/NSProviderMemoryCache.c index 8be56ba..f3c1d72 100644 --- a/service/notification/src/provider/NSProviderMemoryCache.c +++ b/service/notification/src/provider/NSProviderMemoryCache.c @@ -193,6 +193,20 @@ NSResult NSStorageWrite(NSCacheList * list, NSCacheElement * newObj) } } + else if(type == NS_PROVIDER_CACHE_REGISTER_TOPIC) + { + NS_LOG(DEBUG, "Type is REGITSTER TOPIC"); + + NSCacheTopicData * topicData = (NSCacheTopicData *) newObj->data; + NSCacheElement * it = NSStorageRead(list, topicData->topicName); + + if (it) + { + NS_LOG(DEBUG, "already registered for topic name"); + pthread_mutex_unlock(&NSCacheMutex); + return NS_FAIL; + } + } if (list->head == NULL) { @@ -239,12 +253,13 @@ bool NSProviderCompareIdCacheData(NSCacheType type, void * data, const char * id return false; } + NS_LOG_V(DEBUG, "Data(compData) = [%s]", id); + if (type == NS_PROVIDER_CACHE_SUBSCRIBER) { NSCacheSubData * subData = (NSCacheSubData *) data; NS_LOG_V(DEBUG, "Data(subData) = [%s]", subData->id); - NS_LOG_V(DEBUG, "Data(compData) = [%s]", id); if (strcmp(subData->id, id) == 0) { @@ -254,11 +269,24 @@ bool NSProviderCompareIdCacheData(NSCacheType type, void * data, const char * id NS_LOG(DEBUG, "Message Data is Not Same"); return false; + } + else if (type == NS_PROVIDER_CACHE_REGISTER_TOPIC) + { + NSCacheTopicData * topicData = (NSCacheTopicData *) data; + + NS_LOG_V(DEBUG, "Data(topicData) = [%s]", topicData->topicName); + + if (strcmp(topicData->topicName, id) == 0) + { + NS_LOG(DEBUG, "SubData is Same"); + return true; + } + NS_LOG(DEBUG, "Message Data is Not Same"); + return false; } NS_LOG(DEBUG, "NSProviderCompareIdCacheData - OUT"); - return false; } diff --git a/service/notification/src/provider/NSProviderTopic.c b/service/notification/src/provider/NSProviderTopic.c index f30df90..08835c2 100644 --- a/service/notification/src/provider/NSProviderTopic.c +++ b/service/notification/src/provider/NSProviderTopic.c @@ -22,6 +22,9 @@ static bool isTopicList = false; +NSResult NSStoreTopics(const char * topicName); +NSResult NSSendTopicUpdation(); + NSResult NSInitTopicList() { NS_LOG(DEBUG, "NSInitTopicList - IN"); @@ -65,65 +68,25 @@ NSTopicList * NSGetTopics(char *consumerId) return topicList; } -//TODO: update parameter -NSResult NSStoreTopics(char *consumerId, NSTopics** topics) +NSResult NSStoreTopics(const char * topicName) { NS_LOG(DEBUG, "NSWriteTopicsToStorage()"); - if(!consumerId) - { - NS_LOG(DEBUG, "Store registered topic list"); - //TODO: store registered topic list - } - else // topic selection for consumer - { - NS_LOG(DEBUG, "Store subscribed topic list"); - //TODO: store subscribed topic list for consumer - - //TODO: modiy caching logic - NSCacheElement * element = (NSCacheElement *) OICMalloc(sizeof(NSCacheElement)); - NSCacheTopicData * topicData = (NSCacheTopicData *) OICMalloc(sizeof(NSCacheTopicData)); - - OICStrcpy(topicData->consumerId, UUID_STRING_SIZE, consumerId); - NS_LOG_V(DEBUG, "consumer id: %s", topicData->consumerId); - - // TODO: print topic list - topicData->topics = topics; - NS_LOG(DEBUG, "print topic list"); + NSCacheTopicData * data = (NSCacheTopicData *)OICMalloc(sizeof(NSCacheTopicData)); + data->topicName = topicName; + data->state = NS_TOPIC_UNSUBSCRIBED; - element->data = (void*) topicData; - element->next = NULL; - - if(NSStorageWrite(consumerTopicList, element) != NS_OK) - { - NS_LOG(DEBUG, "fail to write cache"); - } - } - - NS_LOG(DEBUG, "NSWriteTopicsToStorage() NS_OK"); - return NS_OK; -} + NSCacheElement * element = (NSCacheElement *) OICMalloc(sizeof(NSCacheElement)); + element->data = (void *) data; + element->next = NULL; -NSResult NSRegisterTopicList(NSTopicList *topicList) -{ - NS_LOG(DEBUG, "NSRegisterTopicList()"); - - if(!topicList) + if(NSStorageWrite(registeredTopicList, element) != NS_OK) { - NS_LOG(ERROR, "no topics"); - return NS_ERROR; + NS_LOG(DEBUG, "fail to write cache"); } + NSSendTopicUpdation(); - OCResourceHandle rHandle = NULL; - if(NSPutTopicResource(topicList, &rHandle) != NS_OK) - { - NS_LOG(ERROR, "Fail to put topic resource"); - return NS_ERROR; - } - - NSStoreTopics(NULL, topicList->head); - - NS_LOG(DEBUG, "NSRegisterTopicList() NS_OK"); + NS_LOG(DEBUG, "NSWriteTopicsToStorage() NS_OK"); return NS_OK; } @@ -150,7 +113,8 @@ NSResult NSSubscribeTopicList(char *consumerId, NSTopicList *topicList) return NS_ERROR; } - NSStoreTopics(consumerId, topicList->head); + //TODO it will change logic. + //NSStoreTopics(consumerId, topicList->head); NS_LOG(DEBUG, "NSSubscribeTopicList() NS_OK"); return NS_OK; @@ -389,12 +353,10 @@ void * NSTopicSchedule(void * ptr) // TODO: implement break; case TASK_ADD_TOPIC: - // TODO: modify to add single topic + { NS_LOG(DEBUG, "CASE TASK_ADD_TOPIC : "); - NSTopicList * registeredTopicList = (NSTopicList *) node->taskData; - NSRegisterTopicList(registeredTopicList); - NSSendTopicUpdation(); - // TODO : free NSTopic + NSStoreTopics((const char *) node->taskData); + } break; case TASK_DELETE_TOPIC: // TODO: implement -- 2.7.4