SinricPro Library
RangeController.h
1 #ifndef _RANGECONTROLLER_H_
2 #define _RANGECONTROLLER_H_
3 
4 #include "SinricProRequest.h"
5 
10 template <typename T>
12  public:
13  RangeController() { static_cast<T &>(*this).requestHandlers.push_back(std::bind(&RangeController<T>::handleRangeController, this, std::placeholders::_1)); }
28  using SetRangeValueCallback = std::function<bool(const String &, int &)>;
29 
45  using GenericSetRangeValueCallback = std::function<bool(const String &, const String &, int &)>;
46 
61  using AdjustRangeValueCallback = std::function<bool(const String &, int &)>;
62 
78  using GenericAdjustRangeValueCallback = std::function<bool(const String&, const String&, int&)>;
79 
81  void onRangeValue(const String& instance, GenericSetRangeValueCallback cb);
82 
84  void onAdjustRangeValue(const String& instance, GenericAdjustRangeValueCallback cb);
85 
86  bool sendRangeValueEvent(int rangeValue, String cause = "PHYSICAL_INTERACTION");
87  bool sendRangeValueEvent(const String& instance, int rangeValue, String cause = "PHYSICAL_INTERACTION");
88 
89  protected:
90  bool handleRangeController(SinricProRequest &request);
91 
92  private:
93  SetRangeValueCallback setRangeValueCallback;
94  std::map<String, GenericSetRangeValueCallback> genericSetRangeValueCallback;
95  AdjustRangeValueCallback adjustRangeValueCallback;
96  std::map<String, GenericAdjustRangeValueCallback> genericAdjustRangeValueCallback;
97 };
98 
105 template <typename T>
107  setRangeValueCallback = cb;
108 }
109 
117 template <typename T>
119  genericSetRangeValueCallback[instance] = cb;
120 }
121 
128 template <typename T>
130  adjustRangeValueCallback = cb;
131 }
132 
133 template <typename T>
134 void RangeController<T>::onAdjustRangeValue(const String &instance, GenericAdjustRangeValueCallback cb) {
135  genericAdjustRangeValueCallback[instance] = cb;
136 }
137 
138 
148 template <typename T>
149 bool RangeController<T>::sendRangeValueEvent(int rangeValue, String cause) {
150  T& device = static_cast<T&>(*this);
151 
152  DynamicJsonDocument eventMessage = device.prepareEvent("setRangeValue", cause.c_str());
153  JsonObject event_value = eventMessage["payload"]["value"];
154  event_value["rangeValue"] = rangeValue;
155  return device.sendEvent(eventMessage);
156 }
157 
168 template <typename T>
169 bool RangeController<T>::sendRangeValueEvent(const String& instance, int rangeValue, String cause){
170  T &device = static_cast<T &>(*this);
171 
172  DynamicJsonDocument eventMessage = device.prepareEvent("setRangeValue", cause.c_str());
173  eventMessage["payload"]["instanceId"] = instance;
174 
175  JsonObject event_value = eventMessage["payload"]["value"];
176  event_value["rangeValue"] = rangeValue;
177  return device.sendEvent(eventMessage);
178 }
179 
180 template <typename T>
181 bool RangeController<T>::handleRangeController(SinricProRequest &request) {
182  T &device = static_cast<T &>(*this);
183 
184  bool success = false;
185 
186  if (request.action == "setRangeValue") {
187  int rangeValue = request.request_value["rangeValue"] | 0;
188  if (request.instance != "") {
189  if (genericSetRangeValueCallback.find(request.instance) != genericSetRangeValueCallback.end())
190  success = genericSetRangeValueCallback[request.instance](device.deviceId, request.instance, rangeValue);
191  } else {
192  if (setRangeValueCallback) success = setRangeValueCallback(device.deviceId, rangeValue);
193  }
194  request.response_value["rangeValue"] = rangeValue;
195  return success;
196  }
197 
198  if (request.action == "adjustRangeValue") {
199  int rangeValueDelta = request.request_value["rangeValueDelta"] | 0;
200  if (request.instance != "") {
201  if (genericAdjustRangeValueCallback.find(request.instance) != genericAdjustRangeValueCallback.end())
202  success = genericAdjustRangeValueCallback[request.instance](device.deviceId, request.instance, rangeValueDelta);
203  } else {
204  if (adjustRangeValueCallback)
205  success = adjustRangeValueCallback(device.deviceId, rangeValueDelta);
206  }
207 
208  request.response_value["rangeValue"] = rangeValueDelta;
209  return success;
210  }
211 
212  return success;
213 }
214 
215 #endif
RangeController.
Definition: RangeController.h:11
bool sendRangeValueEvent(const String &instance, int rangeValue, String cause="PHYSICAL_INTERACTION")
Send rangeValue event to report curent rangeValue to SinricPro server for a specific instance (custom...
Definition: RangeController.h:169
std::function< bool(const String &, const String &, int &)> GenericAdjustRangeValueCallback
Callback definition for onAdjustRangeValue function on a specific instance for custom devices.
Definition: RangeController.h:78
void onRangeValue(SetRangeValueCallback cb)
Set callback function for setRangeValue request.
Definition: RangeController.h:106
std::function< bool(const String &, int &)> AdjustRangeValueCallback
Callback definition for onAdjustRangeValue function.
Definition: RangeController.h:61
void onRangeValue(const String &instance, GenericSetRangeValueCallback cb)
Set callback function for setRangeValue request on a specific instance (custom device)
Definition: RangeController.h:118
std::function< bool(const String &, int &)> SetRangeValueCallback
Callback definition for onRangeValue function.
Definition: RangeController.h:28
void onAdjustRangeValue(AdjustRangeValueCallback cb)
Set callback function for adjustRangeValue request.
Definition: RangeController.h:129
std::function< bool(const String &, const String &, int &)> GenericSetRangeValueCallback
Callback definition for onRangeValue function on a specific instance.
Definition: RangeController.h:45
bool sendRangeValueEvent(int rangeValue, String cause="PHYSICAL_INTERACTION")
Send rangeValue event to report curent rangeValue to SinricPro server.
Definition: RangeController.h:149