SinricPro Library
ToggleController.h
1 #ifndef _TOGGLECONTROLLER_H_
2 #define _TOGGLECONTROLLER_H_
3 
4 #include "SinricProRequest.h"
5 
10 template <typename T>
12 public:
13  ToggleController() { static_cast<T &>(*this).requestHandlers.push_back(std::bind(&ToggleController<T>::handleToggleController, this, std::placeholders::_1)); }
28  using GenericToggleStateCallback = std::function<bool(const String &, const String&, bool &)>;
29 
30  void onToggleState(const String& instance, GenericToggleStateCallback cb);
31  bool sendToggleStateEvent(const String &instance, bool state, String cause = "PHYSICAL_INTERACTION");
32 
33 protected:
34  bool handleToggleController(SinricProRequest &request);
35 
36 private:
37  std::map<String, GenericToggleStateCallback> genericToggleStateCallback;
38 };
39 
40 
49 template <typename T>
51  genericToggleStateCallback[instance] = cb;
52 }
53 
64 template <typename T>
65 bool ToggleController<T>::sendToggleStateEvent(const String &instance, bool state, String cause) {
66  T& device = static_cast<T&>(*this);
67 
68  DynamicJsonDocument eventMessage = device.prepareEvent("setToggleState", cause.c_str());
69  eventMessage["payload"]["instanceId"] = instance;
70  JsonObject event_value = eventMessage["payload"]["value"];
71  event_value["state"] = state ? "On" : "Off";
72  return device.sendEvent(eventMessage);
73 }
74 
75 template <typename T>
76 bool ToggleController<T>::handleToggleController(SinricProRequest &request) {
77  T &device = static_cast<T &>(*this);
78 
79  bool success = false;
80 
81  if (request.action == "setToggleState") {
82  bool powerState = request.request_value["state"] == "On" ? true : false;
83  if (genericToggleStateCallback.find(request.instance) != genericToggleStateCallback.end())
84  success = genericToggleStateCallback[request.instance](device.deviceId, request.instance, powerState);
85  request.response_value["state"] = powerState ? "On" : "Off";
86  return success;
87  }
88  return success;
89 }
90 
91 #endif
ToggleController.
Definition: ToggleController.h:11
void onToggleState(const String &instance, GenericToggleStateCallback cb)
Set callback function for toggleState request.
Definition: ToggleController.h:50
std::function< bool(const String &, const String &, bool &)> GenericToggleStateCallback
Callback definition for onToggleState function.
Definition: ToggleController.h:28
bool sendToggleStateEvent(const String &instance, bool state, String cause="PHYSICAL_INTERACTION")
Send setToggleState event to SinricPro Server indicating actual toggle state.
Definition: ToggleController.h:65