Updated NS Sample App for testing Sync and sending complete NSMessage
authorabitha.s <abitha.s@samsung.com>
Tue, 18 Oct 2016 13:31:46 +0000 (19:01 +0530)
committerUze Choi <uzchoi@samsung.com>
Wed, 19 Oct 2016 07:34:45 +0000 (07:34 +0000)
Change-Id: I8bf14b020b1e5ec42dcf5710fe30a1b6beefbe4b
Signed-off-by: abitha.s <abitha.s@samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/13401
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Uze Choi <uzchoi@samsung.com>
(cherry picked from commit 307953f025c470abc8ea8b6f2ea8297fa38cc42f)
Reviewed-on: https://gerrit.iotivity.org/gerrit/13425

service/notification/cpp-wrapper/examples/linux/notificationserviceconsumer.cpp
service/notification/cpp-wrapper/examples/linux/notificationserviceprovider.cpp

index c722713..d6fac69 100755 (executable)
@@ -35,6 +35,7 @@ using namespace OIC::Service;
 bool isExit = false;\r
 std::string REMOTE_SERVER_ADDRESS;\r
 std::string mainProvider;\r
+uint64_t mainMessageId = 0;\r
 \r
 FILE* server_fopen(const char *path, const char *mode)\r
 {\r
@@ -44,23 +45,46 @@ FILE* server_fopen(const char *path, const char *mode)
 \r
 void onNotificationPostedCb(OIC::Service::NSMessage *notification)\r
 {\r
+    std::cout << "------------------------------------" << std::endl;\r
+    std::cout << "Message Received " << std::endl;\r
+    std::cout << "------------------------------------" << std::endl;\r
     std::cout << "id : " << notification->getMessageId() << std::endl;\r
     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
-    if (provider != nullptr)\r
+    std::cout << "type : " <<  (int) notification->getType() << std::endl;\r
+    std::cout << "TTL : " <<  notification->getTTL() << std::endl;\r
+    std::cout << "time : " <<  notification->getTime() << std::endl;\r
+    if(notification->getMediaContents() != nullptr)\r
+    {\r
+        std::cout << "MediaContents IconImage : " <<  notification->getMediaContents()->getIconImage()\r
+                                                    << std::endl;\r
+    }\r
+    std::cout << "ExtraInfo " << std::endl;\r
+    OC::OCRepresentation rep = notification->getExtraInfo();\r
+    for(auto it : rep.getResourceTypes())\r
+    {\r
+        std::cout << "resourceType : " << it << std::endl;\r
+    }\r
+    for(auto it : rep.getResourceInterfaces())\r
     {\r
-        provider->sendSyncInfo(notification->getMessageId(),\r
-                               OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_READ);\r
+        std::cout << "Interface : " << it << std::endl;\r
     }\r
+    for(auto it : rep.getValues())\r
+    {\r
+        std::cout << "Key : " << it.first << std::endl;\r
+    }\r
+    mainMessageId = notification->getMessageId();\r
 }\r
 \r
 void onNotificationSyncCb(OIC::Service::NSSyncInfo *sync)\r
 {\r
+    std::cout << "------------------------------------" << std::endl;\r
+    std::cout << "SyncInfo Received " << std::endl;\r
+    std::cout << "------------------------------------" << std::endl;\r
     std::cout << "Sync ID : " <<  sync->getMessageId() << std::endl;\r
+    std::cout << "Provider ID : " <<  sync->getProviderId() << std::endl;\r
     std::cout << "Sync STATE : " << (int) sync->getState() << std::endl;\r
 }\r
 \r
@@ -74,6 +98,7 @@ void onProviderStateChangedCb(OIC::Service::NSProviderState state)
     else if (state == OIC::Service::NSProviderState::DENY)\r
     {\r
         std::cout << "Provider Subscription Denied" << std::endl;\r
+        std::cout << "------------------------------------" << std::endl;\r
     }\r
     else if (state == OIC::Service::NSProviderState::TOPIC)\r
     {\r
@@ -94,13 +119,15 @@ void onProviderStateChangedCb(OIC::Service::NSProviderState state)
     else if (state == OIC::Service::NSProviderState::STOPPED)\r
     {\r
         std::cout << "Provider Stopped" << std::endl;\r
+        std::cout << "------------------------------------" << std::endl;\r
     }\r
 }\r
 \r
 void onDiscoverNotificationCb(OIC::Service::NSProvider *provider)\r
 {\r
-    std::cout << "notification resource discovered" << std::endl;\r
+    std::cout << "Notification Resource Discovered" << std::endl;\r
     std::cout << "SetListeners for callbacks" << std::endl;\r
+    std::cout << "ProviderID : " << provider->getProviderId() << std::endl;\r
     provider->setListener(onProviderStateChangedCb, onNotificationPostedCb, onNotificationSyncCb);\r
     if (!provider->isSubscribed())\r
     {\r
@@ -155,27 +182,87 @@ int main(void)
 \r
         std::cout << "1. Start Consumer" << std::endl;\r
         std::cout << "2. Stop Consumer" << std::endl;\r
-        std::cout << "3. GetTopicList" << std::endl;\r
-        std::cout << "4. UpdateTopicList" << std::endl;\r
+        std::cout << "3. SendSyncInfo" << std::endl;\r
+        std::cout << "4. GetTopicList" << std::endl;\r
+        std::cout << "5. UpdateTopicList" << std::endl;\r
 #ifdef WITH_CLOUD\r
-        std::cout << "5. Enable  NS Consumer RemoteService" << std::endl;\r
+        std::cout << "6. Enable  NS Consumer RemoteService" << std::endl;\r
 #endif\r
-        std::cout << "6. Exit" << std::endl;\r
+        std::cout << "7. Exit" << std::endl;\r
 \r
         std::cout << "Input: " << std::endl;\r
         std::cin >> num;\r
         switch (num)\r
         {\r
             case 1:\r
-                std::cout << "1. Start the Notification Consumer" << std::endl;\r
+                std::cout << "Start the Notification Consumer" << std::endl;\r
                 NSConsumerService::getInstance()->start(onDiscoverNotificationCb);\r
                 break;\r
             case 2:\r
-                std::cout << "2. Stop the Notification Consumer" << std::endl;\r
+                std::cout << "Stop the Notification Consumer" << std::endl;\r
                 NSConsumerService::getInstance()->stop();\r
                 break;\r
             case 3:\r
                 {\r
+                    std::cout <<  "SendSyncInfo" << std::endl;\r
+                    if(!mainMessageId)\r
+                    {\r
+                        std::cout <<  "Message ID is empty" << std::endl;\r
+                        break;\r
+                    }\r
+                    std::cout << "1. Send Read Sync" << std::endl;\r
+                    std::cout << "2. Send Delete Sync" << std::endl;\r
+                    int syn = 0;\r
+                    while(!(std::cin >> syn)){\r
+                        cout << "Bad value!";\r
+                        std::cin.clear();\r
+                        std::cin.ignore(numeric_limits<streamsize>::max(), '\n');\r
+                    }\r
+                    switch (syn)\r
+                    {\r
+                        case 1:\r
+                        {\r
+                            std::cout << "Sending Read Sync" << std::endl;\r
+                            auto provider = NSConsumerService::getInstance()->getProvider(\r
+                                                mainProvider);\r
+                            if (provider != nullptr)\r
+                            {\r
+                                provider->sendSyncInfo(mainMessageId,\r
+                                                       OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_READ);\r
+                            }\r
+                        }\r
+                        break;\r
+                        case 2:\r
+                        {\r
+                            std::cout << "Sending Delete Sync" << std::endl;\r
+                            auto provider = NSConsumerService::getInstance()->getProvider(\r
+                                                mainProvider);\r
+                            if (provider != nullptr)\r
+                            {\r
+                                provider->sendSyncInfo(mainMessageId,\r
+                                                       OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_DELETED);\r
+                            }\r
+                        }\r
+                        break;\r
+                        default:\r
+                        {\r
+                            cout << "Invalid Input!. sending default Read Sync";\r
+                            auto provider = NSConsumerService::getInstance()->getProvider(\r
+                                                mainProvider);\r
+                            if (provider != nullptr)\r
+                            {\r
+                                provider->sendSyncInfo(mainMessageId,\r
+                                                       OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_READ);\r
+                            }\r
+                            std::cin.clear();\r
+                            std::cin.ignore(numeric_limits<streamsize>::max(), '\n');\r
+                            break;\r
+                        }\r
+                    }\r
+                    break;\r
+                }\r
+            case 4:\r
+                {\r
                     std::cout <<  "GetTopicList" << std::endl;\r
                     OIC::Service::NSProvider *provider = NSConsumerService::getInstance()->getProvider(mainProvider);\r
                     if (provider != nullptr)\r
@@ -192,7 +279,7 @@ int main(void)
                     }\r
                 }\r
                 break;\r
-            case 4:\r
+            case 5:\r
                 {\r
                     std::cout <<  "UpdateTopicList" << std::endl;\r
                     OIC::Service::NSProvider *provider = NSConsumerService::getInstance()->getProvider(mainProvider);\r
@@ -210,21 +297,22 @@ int main(void)
                 }\r
                 break;\r
 #ifdef WITH_CLOUD\r
-            case 5:\r
+            case 6:\r
                 {\r
-                    std::cout << "5. Enable NS Consumer RemoteService" << std::endl;\r
+                    std::cout << "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 6:\r
-                std::cout << "6. Exit" << std::endl;\r
+            case 7:\r
+                std::cout << "Exit" << std::endl;\r
                 NSConsumerService::getInstance()->stop();\r
                 isExit = true;\r
                 break;\r
             default:\r
+                std::cout << "Under Construction" << std::endl;\r
                 std::cin.clear();\r
                 std::cin.ignore(numeric_limits<streamsize>::max(), '\n');\r
                 break;\r
index eef42db..35fae95 100755 (executable)
@@ -36,7 +36,7 @@
 using namespace std;\r
 using namespace OIC::Service;\r
 std::string mainConsumer;\r
-uint64_t mainMessageId;\r
+uint64_t mainMessageId = 0;\r
 \r
 extern char *strdup(const char *s);\r
 \r
@@ -74,8 +74,9 @@ void subscribeRequestCallback(OIC::Service::NSConsumer *consumer)
 \r
 void syncCallback(OIC::Service::NSSyncInfo *sync)\r
 {\r
-    std::cout << "synnc requested" << std::endl;\r
-\r
+    std::cout << "SyncInfo Received " << std::endl;\r
+    std::cout << "Sync ID : " <<  sync->getMessageId() << std::endl;\r
+    std::cout << "Provider ID : " <<  sync->getProviderId() << std::endl;\r
     std::cout << "Sync State: " << (int) sync->getState() << std::endl;\r
 }\r
 \r
@@ -99,21 +100,23 @@ int main()
     {\r
         std::cout << "1. Start the Notification Provider(Accepter: Provider)" << std::endl;\r
         std::cout << "2. Start the Notification Provider(Accepter: Consumer)" << std::endl;\r
-        std::cout << "3. SendMessage " << std::endl;\r
-        std::cout << "4. SendSyncInfo" << std::endl;\r
-\r
-        std::cout << "5. RegisterTopic" << std::endl;\r
-        std::cout << "6. UnregisterTopic" << std::endl;\r
-        std::cout << "7. SetTopic" << std::endl;\r
-        std::cout << "8. UnsetTopic" << std::endl;\r
-        std::cout << "9. GetConsumerTopicList" << std::endl;\r
-        std::cout << "10. GetRegisteredTopicList" << std::endl;\r
+        std::cout << "3. Allow Subscription" << std::endl;\r
+        std::cout << "4. Deny Subscription" << std::endl;\r
+        std::cout << "5. SendMessage " << std::endl;\r
+        std::cout << "6. SendSyncInfo" << std::endl;\r
+\r
+        std::cout << "7. RegisterTopic" << std::endl;\r
+        std::cout << "8. UnregisterTopic" << std::endl;\r
+        std::cout << "9. SetTopic" << std::endl;\r
+        std::cout << "10. UnsetTopic" << std::endl;\r
+        std::cout << "11. GetConsumerTopicList" << std::endl;\r
+        std::cout << "12. GetRegisteredTopicList" << std::endl;\r
 #ifdef WITH_CLOUD\r
-        std::cout << "11. Enable NS Provider RemoteService" << std::endl;\r
-        std::cout << "12. Disable NS Provider RemoteService" << std::endl;\r
+        std::cout << "13. Enable NS Provider RemoteService" << std::endl;\r
+        std::cout << "14. Disable NS Provider RemoteService" << std::endl;\r
 #endif\r
-        std::cout << "13. Stop the Notification Provider" << std::endl;\r
-        std::cout << "14. Exit()" << std::endl;\r
+        std::cout << "15. Stop the Notification Provider" << std::endl;\r
+        std::cout << "16. Exit()" << std::endl;\r
 \r
         std::cout << "input : ";\r
 \r
@@ -145,7 +148,33 @@ int main()
                 }\r
             case 3:\r
                 {\r
+                    std::cout << "Allow Subscription" << std::endl;\r
+                    OIC::Service::NSConsumer *consumer = NSProviderService::getInstance()->getConsumer(\r
+                                                            mainConsumer);\r
+                    if (consumer != nullptr)\r
+                    {\r
+                        std::cout << "ALLOW" << std::endl;\r
+                        consumer->acceptSubscription(true);\r
+                    }\r
+                    break;\r
+                }\r
+            case 4:\r
+                {\r
+                    std::cout << "Deny Subscription" << std::endl;\r
+                    OIC::Service::NSConsumer *consumer = NSProviderService::getInstance()->getConsumer(\r
+                                                            mainConsumer);\r
+                    if (consumer != nullptr)\r
+                    {\r
+                        std::cout << "DENY" << std::endl;\r
+                        consumer->acceptSubscription(false);\r
+                    }\r
+                    break;\r
+                }\r
+            case 5:\r
+                {\r
+                    std::cout << "------------------------------------" << std::endl;\r
                     std::cout << "SendMessage" << std::endl;\r
+                    std::cout << "------------------------------------" << std::endl;\r
 \r
                     std::string dummy;\r
                     std::string title;\r
@@ -175,22 +204,73 @@ int main()
                     msg->setContentText(body.c_str());\r
                     msg->setSourceName("OCF");\r
                     msg->setTopic(topic);\r
+                    msg->setTTL(40);\r
+                    msg->setTime("12:30");\r
+                    OIC::Service::NSMediaContents *mediaContents = \r
+                                            new OIC::Service::NSMediaContents("iconImage");\r
+                    msg->setMediaContents(mediaContents);\r
+\r
+                    OC::OCRepresentation rep;\r
+                    rep.setValue("Key1","Value1");\r
+                    rep.setValue("Key2","Value2");\r
+                    msg->setExtraInfo(rep);\r
+\r
                     mainMessageId = msg->getMessageId();\r
                     std::cout << "ProviderID for Message : " << msg->getProviderId() << std::endl;\r
+                    std::cout << "MessageID for Message : " << msg->getMessageId() << std::endl;\r
 \r
                     NSProviderService::getInstance()->sendMessage(msg);\r
-\r
+                    delete mediaContents;\r
                     break;\r
                 }\r
-            case 4:\r
+            case 6:\r
                 {\r
+                    std::cout << "------------------------------------" << std::endl;\r
                     std::cout <<  "SendSyncInfo" << std::endl;\r
-                    NSProviderService::getInstance()->sendSyncInfo(mainMessageId,\r
-                            OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_READ);\r
+                    std::cout << "------------------------------------" << std::endl;\r
+                    if(!mainMessageId)\r
+                    {\r
+                        std::cout <<  "Message ID is empty" << std::endl;\r
+                        break;\r
+                    }\r
+                    std::cout << "1. Send Read Sync" << std::endl;\r
+                    std::cout << "2. Send Delete Sync" << std::endl;\r
+                    int syn = 0;\r
+                    while(!(std::cin >> syn)){\r
+                        cout << "Bad value!";\r
+                        std::cin.clear();\r
+                        std::cin.ignore(numeric_limits<streamsize>::max(), '\n');\r
+                    }\r
+                    switch (syn)\r
+                    {\r
+                        case 1:\r
+                        {\r
+                            std::cout << "Sending Read Sync" << std::endl;\r
+                            NSProviderService::getInstance()->sendSyncInfo(mainMessageId,\r
+                                OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_READ);\r
+                        }\r
+                        break;\r
+                        case 2:\r
+                        {\r
+                            std::cout << "Sending Delete Sync" << std::endl;\r
+                            NSProviderService::getInstance()->sendSyncInfo(mainMessageId,\r
+                                    OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_DELETED);\r
+                        }\r
+                        break;\r
+                        default:\r
+                        {\r
+                            cout << "Invalid Input!. sending default Read Sync";\r
+                            NSProviderService::getInstance()->sendSyncInfo(mainMessageId,\r
+                                OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_READ);\r
+                            std::cin.clear();\r
+                            std::cin.ignore(numeric_limits<streamsize>::max(), '\n');\r
+                            break;\r
+                        }\r
+                    }\r
                     break;\r
                 }\r
 \r
-            case 5:\r
+            case 7:\r
                 std::cout <<  "RegisterTopic" << std::endl;\r
                 NSProviderService::getInstance()->registerTopic("OCF_TOPIC1");\r
                 NSProviderService::getInstance()->registerTopic("OCF_TOPIC2");\r
@@ -198,12 +278,12 @@ int main()
                 NSProviderService::getInstance()->registerTopic("OCF_TOPIC4");\r
                 break;\r
 \r
-            case 6:\r
+            case 8:\r
                 std::cout <<  "UnregisterTopic" << std::endl;\r
                 NSProviderService::getInstance()->unregisterTopic("OCF_TOPIC2");\r
                 break;\r
 \r
-            case 7:\r
+            case 9:\r
                 {\r
                     std::cout <<  "SetTopic" << std::endl;\r
                     OIC::Service::NSConsumer *consumer = NSProviderService::getInstance()->getConsumer(mainConsumer);\r
@@ -216,7 +296,7 @@ int main()
                     }\r
                     break;\r
                 }\r
-            case 8:\r
+            case 10:\r
                 {\r
                     std::cout <<  "UnsetTopic" << std::endl;\r
                     OIC::Service::NSConsumer *consumer = NSProviderService::getInstance()->getConsumer(mainConsumer);\r
@@ -229,7 +309,7 @@ int main()
                 }\r
                 break;\r
 \r
-            case 9:\r
+            case 11:\r
                 {\r
                     std::cout <<  "GetConsumerTopicList" << std::endl;\r
                     OIC::Service::NSConsumer *consumer = NSProviderService::getInstance()->getConsumer(mainConsumer);\r
@@ -251,7 +331,7 @@ int main()
                 }\r
                 break;\r
 \r
-            case 10:\r
+            case 12:\r
                 {\r
                     std::cout <<  "GetRegisteredTopicList" << std::endl;\r
                     auto nsTopics = NSProviderService::getInstance()->getRegisteredTopicList();\r
@@ -265,26 +345,28 @@ int main()
                 }\r
                 break;\r
 #ifdef WITH_CLOUD\r
-            case 11:\r
+            case 13:\r
                 {\r
-                    std::cout << "11. Enable NS Provider RemoteService" << std::endl;\r
+                    std::cout << "Enable NS Provider RemoteService" << std::endl;\r
                     std::cout << "Input the Server Address :";\r
                     std::cin >> REMOTE_SERVER_ADDRESS;\r
                     NSProviderService::getInstance()->enableRemoteService(REMOTE_SERVER_ADDRESS);\r
                     break;\r
                 }\r
-            case 12:\r
+            case 14:\r
                 {\r
-                    std::cout << "12. Disable NS Provider RemoteService" << std::endl;\r
+                    std::cout << "Disable NS Provider RemoteService" << std::endl;\r
                     std::cout << "Input the Server Address :";\r
                     NSProviderService::getInstance()->disableRemoteService(REMOTE_SERVER_ADDRESS);\r
                     break;\r
                 }\r
 #endif\r
-            case 13:\r
+            case 15:\r
+                std::cout << "Stop the Notification Provider" << std::endl;\r
                 NSProviderService::getInstance()->stop();\r
                 break;\r
-            case 14:\r
+            case 16:\r
+                std::cout << "Exit()" << std::endl;\r
                 NSProviderService::getInstance()->stop();\r
                 isExit = true;\r
                 break;\r