#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
+FILE* server_fopen(const char *path, const char *mode)\r
+{\r
+ (void)path;\r
+ return fopen("oic_ns_provider_db.dat", mode);\r
+}\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
+ if (provider != nullptr)\r
+ {\r
+ provider->sendSyncInfo(notification->getMessageId(),\r
+ OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_READ);\r
+ }\r
}\r
\r
void onNotificationSyncCb(OIC::Service::NSSyncInfo *sync)\r
std::cout << "Sync STATE : " << (int) sync->getState() << std::endl;\r
}\r
\r
-void onDiscoverNotificationCb(OIC::Service::NSProvider *provider)\r
+void onProviderStateChangedCb(OIC::Service::NSProviderState state)\r
{\r
- std::cout << "notification resource discovered" << std::endl;\r
- provider->subscribe();\r
- std::cout << "startSubscribing" << std::endl;\r
+ std::cout << "onProviderStateChangedCb" << std::endl;\r
+ if (state == OIC::Service::NSProviderState::ALLOW)\r
+ {\r
+ std::cout << "Provider Subscription Accepted" << std::endl;\r
+ }\r
+ else if (state == OIC::Service::NSProviderState::DENY)\r
+ {\r
+ std::cout << "Provider Subscription Denied" << std::endl;\r
+ }\r
+ else if (state == OIC::Service::NSProviderState::TOPIC)\r
+ {\r
+ OIC::Service::NSProvider *provider = NSConsumerService::getInstance()->getProvider(mainProvider);\r
+ if (provider != nullptr)\r
+ {\r
+ auto topicList = provider->getTopicList();\r
+ if (topicList != nullptr)\r
+ {\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
+ }\r
+ else if (state == OIC::Service::NSProviderState::STOPPED)\r
+ {\r
+ std::cout << "Provider Stopped" << std::endl;\r
+ }\r
}\r
\r
-void onSubscriptionAcceptedCb(OIC::Service::NSProvider *provider)\r
+void onDiscoverNotificationCb(OIC::Service::NSProvider *provider)\r
{\r
- std::cout << "Subscription accepted" << std::endl;\r
- std::cout << "subscribed provider Id : " << provider->getProviderId() << std::endl;\r
- provider->setListener(onNotificationPostedCb, onNotificationSyncCb);\r
+ std::cout << "notification resource discovered" << std::endl;\r
+ std::cout << "SetListeners for callbacks" << std::endl;\r
+ provider->setListener(onProviderStateChangedCb, onNotificationPostedCb, onNotificationSyncCb);\r
+ if (!provider->isSubscribed())\r
+ {\r
+ std::cout << "startSubscribing" << std::endl;\r
+ provider->subscribe();\r
+ }\r
+ if (mainProvider.empty())\r
+ {\r
+ mainProvider = provider->getProviderId();\r
+ }\r
}\r
\r
void *OCProcessThread(void *ptr)\r
\r
int main(void)\r
{\r
- pthread_t OCThread;\r
+ pthread_t OCThread = NULL;\r
\r
std::cout << "start Iotivity" << std::endl;\r
- if (OCInit1(OC_CLIENT, OC_DEFAULT_FLAGS, OC_DEFAULT_FLAGS) != OC_STACK_OK)\r
+\r
+ // open oic_db\r
+ static OCPersistentStorage ps = {server_fopen, fread, fwrite, fclose, unlink};\r
+ OCRegisterPersistentStorageHandler(&ps);\r
+\r
+ if (OCInit1(OC_CLIENT_SERVER, OC_DEFAULT_FLAGS, OC_DEFAULT_FLAGS) != OC_STACK_OK)\r
{\r
std::cout << "OCInit fail" << std::endl;\r
return 0;\r
}\r
\r
- NSConsumerService::ConsumerConfig cfg;\r
- cfg.m_discoverCb = onDiscoverNotificationCb;\r
- cfg.m_acceptedCb = onSubscriptionAcceptedCb;\r
-\r
pthread_create(&OCThread, NULL, OCProcessThread, NULL);\r
\r
std::cout << "Start notification consumer service" << std::endl;\r
while (!isExit)\r
{\r
- int num;\r
+ int num = 0;\r
\r
std::cout << "1. Start Consumer" << std::endl;\r
std::cout << "2. Stop Consumer" << std::endl;\r
- std::cout << "3. Enable NS Consumer RemoteService" << std::endl;\r
- std::cout << "5. Exit" << std::endl;\r
+ std::cout << "3. GetTopicList" << std::endl;\r
+ std::cout << "4. UpdateTopicList" << std::endl;\r
+#ifdef WITH_CLOUD\r
+ std::cout << "5. Enable NS Consumer RemoteService" << std::endl;\r
+#endif\r
+ std::cout << "6. Exit" << std::endl;\r
\r
std::cout << "Input: " << std::endl;\r
std::cin >> num;\r
{\r
case 1:\r
std::cout << "1. Start the Notification Consumer" << std::endl;\r
- NSConsumerService::getInstance()->Start(cfg);\r
+ NSConsumerService::getInstance()->start(onDiscoverNotificationCb);\r
break;\r
case 2:\r
std::cout << "2. Stop the Notification Consumer" << std::endl;\r
- NSConsumerService::getInstance()->Stop();\r
+ NSConsumerService::getInstance()->stop();\r
break;\r
case 3:\r
{\r
- std::cout << "3. Enable NS Consumer RemoteService" << std::endl;\r
+ std::cout << "GetTopicList" << 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
+ {\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
+ }\r
+ break;\r
+ case 4:\r
+ {\r
+ std::cout << "UpdateTopicList" << 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::SUBSCRIBED);\r
+ topicList->addTopic("OCF_TOPIC2", NSTopic::NSTopicState::SUBSCRIBED);\r
+ topicList->addTopic("OCF_TOPIC3", NSTopic::NSTopicState::UNSUBSCRIBED);\r
+\r
+ provider->updateTopicList(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
+ NSConsumerService::getInstance()->enableRemoteService(REMOTE_SERVER_ADDRESS);\r
break;\r
}\r
- case 5:\r
- std::cout << "5. Exit" << std::endl;\r
+#endif\r
+ case 6:\r
+ std::cout << "6. Exit" << std::endl;\r
isExit = true;\r
break;\r
default:\r