Merge branch 'master' into notification-service
[platform/upstream/iotivity.git] / service / notification / cpp-wrapper / consumer / src / NSConsumerService.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 "NSConsumerService.h"\r
22 #include <cstring>\r
23 #include "NSConsumerInterface.h"\r
24 #include "NSMessage.h"\r
25 #include "NSCommon.h"\r
26 #include "NSConstants.h"\r
27 #include "oic_string.h"\r
28 \r
29 namespace OIC\r
30 {\r
31     namespace Service\r
32     {\r
33         void onNSProviderDiscovered(::NSProvider *provider)\r
34         {\r
35             NS_LOG(DEBUG, "onNSProviderDiscovered - IN");\r
36             NSProvider *nsProvider = new NSProvider(provider);\r
37             if (NSConsumerService::getInstance()->getConsumerConfig().m_discoverCb != NULL)\r
38                 NSConsumerService::getInstance()->getConsumerConfig().m_discoverCb(nsProvider);\r
39             delete nsProvider;\r
40             NS_LOG(DEBUG, "onNSProviderDiscovered - OUT");\r
41         }\r
42 \r
43         void onNSAccepted(::NSProvider *provider)\r
44         {\r
45             NS_LOG(DEBUG, "onNSAccepted - IN");\r
46             NSProvider *nsProvider = new NSProvider(provider);\r
47             NSConsumerService::getInstance()->getAcceptedProviders().push_back(nsProvider);\r
48 \r
49             if (NSConsumerService::getInstance()->getConsumerConfig().m_acceptedCb != NULL)\r
50                 NSConsumerService::getInstance()->getConsumerConfig().m_acceptedCb(nsProvider);\r
51             NS_LOG(DEBUG, "onNSAccepted - OUT");\r
52         }\r
53 \r
54         void onNSMessageReceived(::NSMessage *message)\r
55         {\r
56             NS_LOG(DEBUG, "onNSMessageReceived - IN");\r
57             NSMessage *nsMessage = new NSMessage(message);\r
58             for (auto it : NSConsumerService::getInstance()->getAcceptedProviders())\r
59             {\r
60                 if (it->getProviderId() == nsMessage->getProviderId())\r
61                 {\r
62                     auto callback = it->getMessageReceivedCb();\r
63                     if (callback != NULL)\r
64                     {\r
65                         callback(nsMessage);\r
66                     }\r
67                     break;\r
68                 }\r
69             }\r
70             delete nsMessage;\r
71             NS_LOG(DEBUG, "onNSMessageReceived - OUT");\r
72         }\r
73 \r
74         void onNSSyncInfoReceived(::NSSyncInfo *syncInfo)\r
75         {\r
76             NS_LOG(DEBUG, "onNSSyncInfoReceived - IN");\r
77             NSSyncInfo *nsSyncInfo = new NSSyncInfo(syncInfo);\r
78             for (auto it : NSConsumerService::getInstance()->getAcceptedProviders())\r
79             {\r
80                 if (it->getProviderId() == nsSyncInfo->getProviderId())\r
81                 {\r
82                     auto callback = it->getSyncInfoReceivedCb();\r
83                     if (callback != NULL)\r
84                     {\r
85                         callback(nsSyncInfo);\r
86                     }\r
87                     break;\r
88                 }\r
89             }\r
90             delete nsSyncInfo;\r
91             NS_LOG(DEBUG, "onNSSyncInfoReceived - OUT");\r
92         }\r
93 \r
94         NSConsumerService::NSConsumerService()\r
95         {\r
96             m_config.m_discoverCb = NULL;\r
97             m_config.m_acceptedCb = NULL;\r
98         }\r
99 \r
100         NSConsumerService::~NSConsumerService()\r
101         {\r
102             for (auto it : getAcceptedProviders())\r
103             {\r
104                 delete it;\r
105             }\r
106             getAcceptedProviders().clear();\r
107         }\r
108         NSConsumerService *NSConsumerService::getInstance()\r
109         {\r
110             static  NSConsumerService s_instance;\r
111             return &s_instance;\r
112         }\r
113 \r
114         void NSConsumerService::Start(NSConsumerService::ConsumerConfig config)\r
115         {\r
116             NS_LOG(DEBUG, "Start - IN");\r
117             m_config = config;\r
118             NSConsumerConfig nsConfig;\r
119             nsConfig.discoverCb = onNSProviderDiscovered;\r
120             nsConfig.acceptedCb = onNSAccepted;\r
121             nsConfig.messageCb = onNSMessageReceived;\r
122             nsConfig.syncInfoCb = onNSSyncInfoReceived;\r
123 \r
124             NSStartConsumer(nsConfig);\r
125             NS_LOG(DEBUG, "Start - OUT");\r
126             return;\r
127         }\r
128 \r
129         void NSConsumerService::Stop()\r
130         {\r
131             NS_LOG(DEBUG, "Stop - IN");\r
132             NSStopConsumer();\r
133             NS_LOG(DEBUG, "Stop - OUT");\r
134             return;\r
135         }\r
136 \r
137         Result NSConsumerService::EnableRemoteService(const std::string &serverAddress)\r
138         {\r
139             NS_LOG(DEBUG, "EnableRemoteService - IN");\r
140             Result result = Result::ERROR;\r
141 #ifdef WITH_CLOUD\r
142             result = (Result) NSConsumerEnableRemoteService(OICStrdup(serverAddress.c_str()));\r
143 #else\r
144             NS_LOG(ERROR, "Remote Services feature is not enabled in the Build");\r
145 #endif\r
146             NS_LOG(DEBUG, "EnableRemoteService - OUT");\r
147             return result;\r
148         }\r
149 \r
150         void NSConsumerService::RescanProvider()\r
151         {\r
152             NS_LOG(DEBUG, "RescanProvider - IN");\r
153             NSRescanProvider();\r
154             NS_LOG(DEBUG, "RescanProvider - OUT");\r
155             return;\r
156         }\r
157 \r
158         NSProvider *NSConsumerService::getProvider(const std::string &id)\r
159         {\r
160             for (auto it : getAcceptedProviders())\r
161             {\r
162                 if (it->getProviderId() == id)\r
163                     return it;\r
164             }\r
165             return NULL;\r
166         }\r
167 \r
168         NSConsumerService::ConsumerConfig NSConsumerService::getConsumerConfig()\r
169         {\r
170             return m_config;\r
171         }\r
172 \r
173         std::list<NSProvider *> NSConsumerService::getAcceptedProviders()\r
174         {\r
175             return m_acceptedProviders;\r
176         }\r
177     }\r
178 }\r