Merge branch 'master' into notification-service
[platform/upstream/iotivity.git] / service / notification / cpp-wrapper / examples / linux / notificationserviceprovider.cpp
1 /******************************************************************\r
2  *\r
3  * Copyright 2016 Samsung Electronics All Rights Reserved.\r
4  *\r
5  *\r
6  *\r
7  * Licensed under the Apache License, Version 2.0 (the "License");\r
8  * you may not use this file except in compliance with the License.\r
9  * You may obtain a copy of the License at\r
10  *\r
11  *      http://www.apache.org/licenses/LICENSE-2.0\r
12  *\r
13  * Unless required by applicable law or agreed to in writing, software\r
14  * distributed under the License is distributed on an "AS IS" BASIS,\r
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
16  * See the License for the specific language governing permissions and\r
17  * limitations under the License.\r
18  *\r
19  ******************************************************************/\r
20 \r
21 #include <iostream>\r
22 #include <stdlib.h>\r
23 #include "NSCommon.h"\r
24 #include "NSProviderService.h"\r
25 #include "logger.h"\r
26 #include "octypes.h"\r
27 #include "pthread.h"\r
28 #include "oic_string.h"\r
29 #include "oic_malloc.h"\r
30 #include "ocstack.h"\r
31 \r
32 #define TAG "NotiProviderWrapperExample"\r
33 using namespace std;\r
34 using namespace OIC::Service;\r
35 \r
36 extern char *strdup(const char *s);\r
37 \r
38 bool isExit = false;\r
39 \r
40 int id = 0;\r
41 std::string REMOTE_SERVER_ADDRESS;\r
42 \r
43 void *OCProcessThread(void *ptr)\r
44 {\r
45     (void) ptr;\r
46     while (!isExit)\r
47     {\r
48         if (OCProcess() != OC_STACK_OK)\r
49         {\r
50             std::cout << "OCStack process error" << std::endl;\r
51             return NULL;\r
52         }\r
53     }\r
54 \r
55     return NULL;\r
56 }\r
57 \r
58 void subscribeRequestCallback(OIC::Service::NSConsumer *consumer)\r
59 {\r
60     std::cout << "consumer requested to subscribe" << std::endl;\r
61 \r
62     std::cout << "Consumer Device ID: " << consumer->getConsumerId() << std::endl;\r
63     consumer->acceptSubscription(consumer, true);\r
64 }\r
65 \r
66 void syncCallback(OIC::Service::NSSyncInfo *sync)\r
67 {\r
68     std::cout << "synnc requested" << std::endl;\r
69 \r
70     std::cout << "Sync State: " << (int) sync->getState() << std::endl;\r
71 }\r
72 \r
73 int main()\r
74 {\r
75     int num;\r
76     pthread_t processThread;\r
77 \r
78     std::cout << "start Iotivity" << std::endl;\r
79 \r
80 \r
81     if (OCInit(NULL, 0, OC_CLIENT_SERVER) != OC_STACK_OK)\r
82     {\r
83         std::cout << "OCStack init error" << std::endl;\r
84         return 0;\r
85     }\r
86 \r
87     pthread_create(&processThread, NULL, OCProcessThread, NULL);\r
88 \r
89     while (!isExit)\r
90     {\r
91         std::cout << "1. Start the Notification Provider(Accepter: Provider)" << std::endl;\r
92         std::cout << "2. Start the Notification Provider(Accepter: Consumer)" << std::endl;\r
93         std::cout << "3. SendMessage " << std::endl;\r
94         std::cout << "4. SendSyncInfo" << std::endl;\r
95 #ifdef WITH_CLOUD\r
96         std::cout << "5. Enable NS Provider RemoteService" << std::endl;\r
97         std::cout << "6. Disable NS Provider RemoteService" << std::endl;\r
98 #endif\r
99         std::cout << "9. Stop the Notification Provider" << std::endl;\r
100         std::cout << "0. Exit()" << std::endl;\r
101 \r
102         std::cout << "input : ";\r
103 \r
104         std::cin >> num;\r
105 \r
106         switch (num)\r
107         {\r
108             case 1:\r
109                 {\r
110                     std::cout << "Start (Accepter: Provider)" << std::endl;\r
111                     NSProviderService::ProviderConfig cfg;\r
112                     cfg.m_subscribeRequestCb = subscribeRequestCallback;\r
113                     cfg.m_syncInfoCb = syncCallback;\r
114                     NSProviderService::getInstance()->Start(NSProviderService::NSAccessPolicy::NS_ACCESS_ALLOW, cfg);\r
115                     break;\r
116                 }\r
117             case 2:\r
118                 {\r
119                     std::cout << "Start (Accepter: Consumer)" << std::endl;\r
120                     NSProviderService::ProviderConfig cfg;\r
121                     cfg.m_subscribeRequestCb = subscribeRequestCallback;\r
122                     cfg.m_syncInfoCb = syncCallback;\r
123                     NSProviderService::getInstance()->Start(NSProviderService::NSAccessPolicy::NS_ACCESS_DENY, cfg);\r
124                     break;\r
125                 }\r
126             case 3:\r
127                 {\r
128                     std::cout << "SendMessage" << std::endl;\r
129 \r
130                     std::string title;\r
131                     std::string body;\r
132 \r
133                     std::cout << "id : " << ++id << std::endl;\r
134                     std::cout << "title : ";\r
135 \r
136                     std::cin >> title;\r
137 \r
138                     std::cout << "body : ";\r
139                     std::cin >> body;\r
140 \r
141                     std::cout << "app - mTitle : " << title << std::endl;\r
142                     std::cout << "app - mContentText : " << body << std::endl;\r
143 \r
144                     OIC::Service::NSMessage *msg = new OIC::Service::NSMessage();\r
145                     msg->setType(OIC::Service::NSMessage::NSMessageType::NS_MESSAGE_INFO);\r
146                     msg->setTitle(title.c_str());\r
147                     msg->setContentText(body.c_str());\r
148                     msg->setTime("");\r
149                     msg->setTTL(0);\r
150                     msg->setSourceName("OCF");\r
151 \r
152                     NSProviderService::getInstance()->SendMessage(msg);\r
153 \r
154                     break;\r
155                 }\r
156             case 4:\r
157                 {\r
158                     std::cout <<  "SendSyncInfo" << std::endl;\r
159                     NSProviderService::getInstance()->SendSyncInfo(1,\r
160                             OIC::Service::NSSyncInfo::NSSyncType::NS_SYNC_READ);\r
161                     break;\r
162                 }\r
163 #ifdef WITH_CLOUD\r
164             case 5:\r
165                 {\r
166                     std::cout << "3. Enable NS Provider RemoteService" << std::endl;\r
167                     std::cout << "Input the Server Address :";\r
168                     std::cin >> REMOTE_SERVER_ADDRESS;\r
169                     NSProviderService::getInstance()->EnableRemoteService(REMOTE_SERVER_ADDRESS);\r
170                     break;\r
171                 }\r
172             case 6:\r
173                 {\r
174                     std::cout << "3. Disable NS Provider RemoteService" << std::endl;\r
175                     std::cout << "Input the Server Address :";\r
176                     NSProviderService::getInstance()->DisableRemoteService(REMOTE_SERVER_ADDRESS);\r
177                     break;\r
178                 }\r
179 #endif\r
180             case 9:\r
181                 NSProviderService::getInstance()->Stop();\r
182                 break;\r
183             case 0:\r
184                 NSProviderService::getInstance()->Stop();\r
185                 isExit = true;\r
186                 break;\r
187             default:\r
188                 std::cout << "Under Construction" << std::endl;\r
189                 break;\r
190         }\r
191 \r
192         std::cout << std::endl;\r
193     }\r
194 \r
195     return 0;\r
196 }\r