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