Imported Upstream version 1.2.0
[platform/upstream/iotivity.git] / resource / include / InProcServerWrapper.h
1 //******************************************************************
2 //
3 // Copyright 2014 Intel Mobile Communications GmbH 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 #ifndef OC_IN_PROC_SERVER_WRAPPER_H_
22 #define OC_IN_PROC_SERVER_WRAPPER_H_
23
24 #include <thread>
25 #include <mutex>
26
27 #include <IServerWrapper.h>
28
29 namespace OC
30 {
31 #ifdef RD_CLIENT
32     namespace ServerCallbackContext
33     {
34         struct PublishContext
35         {
36             PublishResourceCallback callback;
37             PublishContext(PublishResourceCallback cb) : callback(cb){}
38         };
39
40         struct DeleteContext
41         {
42             DeleteResourceCallback callback;
43             DeleteContext(DeleteResourceCallback cb) : callback(cb){}
44         };
45     }
46 #endif
47     class InProcServerWrapper : public IServerWrapper
48     {
49     public:
50         InProcServerWrapper(
51             std::weak_ptr<std::recursive_mutex> csdkLock,
52             PlatformConfig cfg);
53         virtual ~InProcServerWrapper();
54
55         virtual OCStackResult registerResource(
56                     OCResourceHandle& resourceHandle,
57                     std::string& resourceURI,
58                     const std::string& resourceTypeName,
59                     const std::string& resourceInterface,
60                     EntityHandler& entityHandler,
61                     uint8_t resourceProperty);
62
63         virtual OCStackResult registerDeviceInfo(
64                     const OCDeviceInfo deviceInfo);
65
66         virtual OCStackResult registerPlatformInfo(
67                     const OCPlatformInfo PlatformInfo);
68
69         virtual OCStackResult unregisterResource(
70                     const OCResourceHandle& resourceHandle);
71
72         virtual OCStackResult bindTypeToResource(
73                     const OCResourceHandle& resourceHandle,
74                     const std::string& resourceTypeName);
75
76         virtual OCStackResult bindInterfaceToResource(
77                     const OCResourceHandle& resourceHandle,
78                     const std::string& resourceInterface);
79
80         virtual OCStackResult startPresence(const unsigned int seconds);
81
82         virtual OCStackResult stopPresence();
83
84         virtual OCStackResult setDefaultDeviceEntityHandler(EntityHandler entityHandler);
85
86         virtual OCStackResult sendResponse(const std::shared_ptr<OCResourceResponse> pResponse);
87 #ifdef RD_CLIENT
88         virtual OCStackResult publishResourceToRD(const std::string& host,
89                                                   OCConnectivityType connectivityType,
90                                                   ResourceHandles& resourceHandles,
91                                                   PublishResourceCallback& callback,
92                                                   OCQualityOfService qos);
93
94         virtual OCStackResult deleteResourceFromRD(const std::string& host,
95                                                    OCConnectivityType connectivityType,
96                                                    ResourceHandles& resourceHandles,
97                                                    DeleteResourceCallback& callback,
98                                                    OCQualityOfService qos);
99 #endif
100     private:
101         void processFunc();
102         std::thread m_processThread;
103         bool m_threadRun;
104         std::weak_ptr<std::recursive_mutex> m_csdkLock;
105     };
106 }
107
108 #endif