#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
\r
bool isExit = false;\r
std::string REMOTE_SERVER_ADDRESS;\r
+std::string mainProvider;\r
\r
void onNotificationPostedCb(OIC::Service::NSMessage *notification)\r
{\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
+ provider->SendSyncInfo(notification->getMessageId(), OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_READ);\r
}\r
\r
void onNotificationSyncCb(OIC::Service::NSSyncInfo *sync)\r
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
\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
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