Removed #ifdef CA_INTs and other code cleanup.
[platform/upstream/iotivity.git] / resource / examples / groupserver.cpp
1 //******************************************************************
2 //
3 // Copyright 2014 Samsung Electronics All Rights Reserved.
4 //
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
6 //
7 // Licensed under the Apache License, Version 2.0 (the "License");
8 // you may not use this file except in compliance with the License.
9 // You may obtain a copy of the License at
10 //
11 //      http://www.apache.org/licenses/LICENSE-2.0
12 //
13 // Unless required by applicable law or agreed to in writing, software
14 // distributed under the License is distributed on an "AS IS" BASIS,
15 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 // See the License for the specific language governing permissions and
17 // limitations under the License.
18 //
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
20
21 #include "OCPlatform.h"
22 #include "OCApi.h"
23
24 #include <functional>
25 #include <pthread.h>
26 #include <iostream>
27
28 using namespace std;
29 using namespace OC;
30
31 namespace PH = std::placeholders;
32
33 OCResourceHandle resourceHandle;
34 std::vector< OCResourceHandle > resourceHandleVector;
35
36 void foundResource(std::shared_ptr< OCResource > resource)
37 {
38
39     std::string resourceURI;
40     std::string hostAddress;
41
42     try
43     {
44         cout << "FOUND RESOURCE" << endl;
45
46         if (resource)
47         {
48             resourceURI = resource->uri();
49             hostAddress = resource->host();
50
51             cout << "\tResource URI : " << resourceURI << endl;
52             cout << "\tResource Host : " << hostAddress << endl;
53             cout << "\tResource Interfaces : " << resource->getResourceInterfaces().front() << endl;
54             cout << "\tResource Type : " << resource->getResourceTypes().front() << endl;
55             if (resourceURI == "/a/light" || resourceURI == "/a/fan")
56             {
57                 OCResourceHandle foundResourceHandle;
58                 OCStackResult result = OCPlatform::registerResource(foundResourceHandle, resource);
59                 cout << "\tresource registed!" << endl;
60                 if (result == OC_STACK_OK)
61                 {
62                     OCPlatform::bindResource(resourceHandle, foundResourceHandle);
63                     resourceHandleVector.push_back(foundResourceHandle);
64                 }
65                 else
66                 {
67                     cout << "\tresource Error!" << endl;
68                 }
69             }
70
71             // p_platform.bindResource(resourceHandle, foundResourceHandle);
72
73         }
74     }
75     catch (std::exception& e)
76     {
77         std::cout << "" << std::endl;
78     }
79
80 }
81
82 int main(int argc, char* argv[])
83 {
84     ostringstream requestURI;
85
86     OCConnectivityType connectivityType = OC_WIFI;
87
88     if(argc == 2)
89     {
90         try
91         {
92             std::size_t inputValLen;
93             int optionSelected = stoi(argv[1], &inputValLen);
94
95             if(inputValLen == strlen(argv[1]))
96             {
97                 if(optionSelected == 0)
98                 {
99                     connectivityType = OC_ETHERNET;
100                 }
101                 else if(optionSelected == 1)
102                 {
103                     connectivityType = OC_WIFI;
104                 }
105                 else
106                 {
107                     std::cout << "Invalid connectivity type selected. Using default WIFI"
108                         << std::endl;
109                 }
110             }
111             else
112             {
113                 std::cout << "Invalid connectivity type selected. Using default WIFI" << std::endl;
114             }
115         }
116         catch(exception& e)
117         {
118             std::cout << "Invalid input argument. Using WIFI as connectivity type" << std::endl;
119         }
120     }
121     else
122     {
123         std::cout<<"Usage: groupclient <ConnectivityType(0|1)>\n";
124         std::cout<<"ConnectivityType: Default WIFI\n";
125         std::cout<<"ConnectivityType 0: ETHERNET\n";
126         std::cout<<"ConnectivityType 1: WIFI\n";
127     }
128
129     PlatformConfig config
130     { OC::ServiceType::InProc, ModeType::Both, "0.0.0.0", 0, OC::QualityOfService::LowQos };
131
132     try
133     {
134         string resourceURI = "/core/a/collection";
135         string resourceTypeName = "a.collection";
136         string resourceInterface = BATCH_INTERFACE;
137         OCPlatform::Configure(config);
138
139         // EntityHandler cb = std::bind(, PH::_1, PH::_2);
140
141         OCPlatform::registerResource(resourceHandle, resourceURI, resourceTypeName,
142                 resourceInterface,
143                 NULL,
144                 //&entityHandler, // entityHandler
145                 OC_DISCOVERABLE);
146
147         cout << "registerResource is called." << endl;
148
149         requestURI << OC_WELL_KNOWN_QUERY << "?rt=core.light";
150
151         OCPlatform::findResource("", requestURI.str(),
152                                  connectivityType, &foundResource);
153
154         OCPlatform::bindInterfaceToResource(resourceHandle, GROUP_INTERFACE);
155         OCPlatform::bindInterfaceToResource(resourceHandle, DEFAULT_INTERFACE);
156
157         int selectedMenu;
158         bool isRun = true;
159         while (isRun)
160         {
161             cout << endl << "0 :: Quit 1 :: UNREGISTER RESOURCES\n" << endl;
162             std::cin >> selectedMenu;
163
164             switch(selectedMenu)
165             {
166             case 0:
167                 isRun = false;
168                 break;
169             case 1:
170                 std::cout << "Unregistering resources" << std::endl;
171                 for (unsigned int i = 0; i < resourceHandleVector.size(); ++i)
172                 {
173                     OCPlatform::unregisterResource(resourceHandleVector.at(i));
174                 }
175                 break;
176             default:
177                 cout << "Invalid option" << endl;
178             }
179
180         }
181     }
182     catch (OCException& e)
183     {
184
185     }
186
187     return 0;
188 }