1 //******************************************************************
3 // Copyright 2016 Samsung Electronics All Rights Reserved.
5 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
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
11 // http://www.apache.org/licenses/LICENSE-2.0
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.
19 //-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
21 #ifndef SCENE_COLLECTION_RESOURCE_OBJECT_H
22 #define SCENE_COLLECTION_RESOURCE_OBJECT_H
26 #include "RCSResourceObject.h"
27 #include "SceneCommons.h"
28 #include "SceneMemberResource.h"
34 class SceneCollectionResource
35 : public std::enable_shared_from_this<SceneCollectionResource>
38 typedef std::shared_ptr< SceneCollectionResource > Ptr;
39 typedef std::function< void(int) > SceneExecuteCallback;
41 ~SceneCollectionResource() = default;
43 static SceneCollectionResource::Ptr createSceneCollectionObject();
45 void addScene(std::string &&);
46 void addScene(const std::string &);
48 void addSceneMember(SceneMemberResource::Ptr);
50 void execute(std::string &&);
51 void execute(const std::string &);
52 void execute(std::string &&, SceneExecuteCallback);
53 void execute(const std::string &, SceneExecuteCallback);
55 void setName(std::string &&);
56 void setName(const std::string &);
58 std::vector<std::string> getSceneValues() const;
60 std::string getName() const;
62 std::string getId() const;
63 std::string getUri() const;
64 std::string getAddress() const;
66 std::vector<SceneMemberResource::Ptr> getSceneMembers() const;
68 RCSResourceObject::Ptr getRCSResourceObject() const;
71 class SceneExecuteResponseHandler
74 typedef std::shared_ptr<SceneExecuteResponseHandler> Ptr;
76 SceneExecuteResponseHandler()
77 : m_numOfMembers(0), m_responseMembers(0), m_errorCode(0) { }
78 ~SceneExecuteResponseHandler() = default;
81 int m_responseMembers;
83 std::weak_ptr<SceneCollectionResource> m_owner;
84 SceneExecuteCallback m_cb;
86 static SceneExecuteResponseHandler::Ptr createExecuteHandler(
87 const SceneCollectionResource::Ptr, SceneExecuteCallback);
88 void onResponse(const RCSResourceAttributes &, int);
91 class SceneCollectionRequestHandler
94 SceneCollectionRequestHandler() = default;
95 ~SceneCollectionRequestHandler() = default;
97 std::weak_ptr<SceneCollectionResource> m_owner;
99 RCSSetResponse onSetRequest(
100 const RCSRequest &, RCSResourceAttributes &);
101 void onExecute(int, const RCSRequest &, RCSResourceAttributes &);
104 RCSSetResponse addSceneRequest(
105 const RCSRequest &, RCSResourceAttributes &);
106 RCSSetResponse executeSceneRequest(
107 const RCSRequest &, RCSResourceAttributes &);
108 RCSSetResponse createSceneMemberRequest(
109 const RCSRequest &, RCSResourceAttributes &);
110 RCSSetResponse setSceneCollectionName(
111 const RCSRequest &, RCSResourceAttributes &);
113 SceneMemberResource::Ptr createSceneMemberFromRemote(RCSResourceAttributes &);
114 void addMemberInfoFromRemote(SceneMemberResource::Ptr,
115 std::vector<RCSResourceAttributes>);
119 std::string m_address;
121 RCSResourceObject::Ptr m_sceneCollectionResourceObj;
122 std::mutex m_sceneMemberLock;
123 std::vector<SceneMemberResource::Ptr> m_sceneMembers;
125 SceneCollectionRequestHandler m_requestHandler;
126 std::mutex m_executeHandlerLock;
127 std::list<SceneExecuteResponseHandler::Ptr> m_executeHandlers;
129 SceneCollectionResource() = default;
131 SceneCollectionResource(const SceneCollectionResource &) = delete;
132 SceneCollectionResource & operator = (
133 const SceneCollectionResource &) = delete;
135 SceneCollectionResource(SceneCollectionResource &&) = delete;
136 SceneCollectionResource & operator = (
137 SceneCollectionResource &&) = delete;
139 void createResourceObject();
140 void setDefaultAttributes();
141 void initSetRequestHandler();
143 void onExecute(int, SceneExecuteCallback, SceneExecuteResponseHandler::Ptr);
149 #endif // SCENE_COLLECTION_RESOURCE_OBJECT_H