1. Modified the Accepted Providers Consumers list to return references
[platform/upstream/iotivity.git] / service / notification / cpp-wrapper / examples / linux / notificationserviceconsumer.cpp
index fe2af59..3b7e48f 100755 (executable)
@@ -24,6 +24,7 @@
 #include "NSConsumerService.h"\r
 #include "NSMessage.h"\r
 #include "NSProvider.h"\r
+#include "NSTopicsList.h"\r
 #include "ocstack.h"\r
 \r
 #define TAG "NotiConsumerWrapperExample"\r
@@ -32,6 +33,7 @@ using namespace OIC::Service;
 \r
 bool isExit = false;\r
 std::string REMOTE_SERVER_ADDRESS;\r
+std::string mainProvider;\r
 \r
 void onNotificationPostedCb(OIC::Service::NSMessage *notification)\r
 {\r
@@ -39,6 +41,10 @@ void onNotificationPostedCb(OIC::Service::NSMessage *notification)
     std::cout << "title : " << notification->getTitle() << std::endl;\r
     std::cout << "content : " <<  notification->getContentText() << std::endl;\r
     std::cout << "source : " <<  notification->getSourceName() << std::endl;\r
+    std::cout << "topic : " <<  notification->getTopic() << std::endl;\r
+\r
+    auto provider = NSConsumerService::getInstance()->getProvider(notification->getProviderId());\r
+    provider->SendSyncInfo(notification->getMessageId(), OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_READ);\r
 }\r
 \r
 void onNotificationSyncCb(OIC::Service::NSSyncInfo *sync)\r
@@ -54,12 +60,25 @@ void onDiscoverNotificationCb(OIC::Service::NSProvider *provider)
     std::cout << "startSubscribing" << std::endl;\r
 }\r
 \r
-void onProviderChangedCb(OIC::Service::NSProvider *provider,OIC::Service::NSResponse response)\r
+void onProviderChangedCb(OIC::Service::NSProvider *provider, OIC::Service::NSResponse response)\r
 {\r
     std::cout << "Subscription accepted" << std::endl;\r
     std::cout << "subscribed provider Id : " << provider->getProviderId() << std::endl;\r
-    if(response == OIC::Service::NSResponse::ALLOW)\r
+    if (response == OIC::Service::NSResponse::ALLOW)\r
+    {\r
         provider->setListener(onNotificationPostedCb, onNotificationSyncCb);\r
+        if (mainProvider.empty())\r
+            mainProvider = provider->getProviderId();\r
+    }\r
+    else if (response == OIC::Service::NSResponse::TOPIC)\r
+    {\r
+        std::cout << "Provider Topic Updated" << std::endl;\r
+        for (auto it : provider->getTopicList()->getTopicsList())\r
+        {\r
+            std::cout << "Topic Name: " << it->getTopicName() << std::endl;\r
+            std::cout << "Topic state: " << (int) it->getState() << std::endl;\r
+        }\r
+    }\r
 }\r
 \r
 void *OCProcessThread(void *ptr)\r
@@ -103,10 +122,12 @@ int main(void)
 \r
         std::cout << "1. Start Consumer" << std::endl;\r
         std::cout << "2. Stop Consumer" << std::endl;\r
+        std::cout << "3. getInterestTopics" << std::endl;\r
+        std::cout << "4. selectInterestTopics" << std::endl;\r
 #ifdef WITH_CLOUD\r
-        std::cout << "3. Enable  NS Consumer RemoteService" << std::endl;\r
+        std::cout << "5. Enable  NS Consumer RemoteService" << std::endl;\r
 #endif\r
-        std::cout << "5. Exit" << std::endl;\r
+        std::cout << "6. Exit" << std::endl;\r
 \r
         std::cout << "Input: " << std::endl;\r
         std::cin >> num;\r
@@ -120,18 +141,49 @@ int main(void)
                 std::cout << "2. Stop the Notification Consumer" << std::endl;\r
                 NSConsumerService::getInstance()->Stop();\r
                 break;\r
-#ifdef WITH_CLOUD\r
             case 3:\r
                 {\r
-                    std::cout << "3. Enable NS Consumer RemoteService" << std::endl;\r
+                    std::cout <<  "getInterestTopics" << std::endl;\r
+                    OIC::Service::NSProvider *provider = NSConsumerService::getInstance()->getProvider(mainProvider);\r
+                    if (provider != nullptr)\r
+                    {\r
+                        auto topicList = provider->getTopicList();\r
+                        if (topicList != nullptr)\r
+                            for (auto it : topicList->getTopicsList())\r
+                            {\r
+                                std::cout << "Topic Name: " << it->getTopicName() << std::endl;\r
+                                std::cout << "Topic state: " << (int) it->getState() << std::endl;\r
+                            }\r
+                    }\r
+                }\r
+                break;\r
+            case 4:\r
+                {\r
+                    std::cout <<  "selectInterestTopics" << std::endl;\r
+                    OIC::Service::NSProvider *provider = NSConsumerService::getInstance()->getProvider(mainProvider);\r
+                    if (provider != nullptr)\r
+                    {\r
+                        NSTopicsList *topicList = new NSTopicsList();\r
+                        topicList->addTopic("OCF_TOPIC1", NSTopic::NSTopicState::UNSUBSCRIBED);\r
+                        topicList->addTopic("OCF_TOPIC2", NSTopic::NSTopicState::UNSUBSCRIBED);\r
+                        topicList->addTopic("OCF_TOPIC3", NSTopic::NSTopicState::UNSUBSCRIBED);\r
+\r
+                        provider->selectInterestTopics(topicList);\r
+                    }\r
+                }\r
+                break;\r
+#ifdef WITH_CLOUD\r
+            case 5:\r
+                {\r
+                    std::cout << "5. Enable NS Consumer RemoteService" << std::endl;\r
                     std::cout << "Input the Server Address :";\r
                     std::cin >> REMOTE_SERVER_ADDRESS;\r
                     NSConsumerService::getInstance()->EnableRemoteService(REMOTE_SERVER_ADDRESS);\r
                     break;\r
                 }\r
 #endif\r
-            case 5:\r
-                std::cout << "5. Exit" << std::endl;\r
+            case 6:\r
+                std::cout << "6. Exit" << std::endl;\r
                 isExit = true;\r
                 break;\r
             default:\r