SinricPro Library
Loading...
Searching...
No Matches
ToggleController.h
1#pragma once
2
3#include "../SinricProRequest.h"
4#include "../EventLimiter.h"
5#include "../SinricProStrings.h"
6
7#include "../SinricProNamespace.h"
8namespace SINRICPRO_NAMESPACE {
9
10FSTR(TOGGLE, setToggleState); // "setToggleState"
11FSTR(TOGGLE, state); // "state"
12FSTR(TOGGLE, On); // "On"
13FSTR(TOGGLE, Off); // "Off"
14
29using GenericToggleStateCallback = std::function<bool(const String &, const String&, bool &)>;
30
31
36template <typename T>
38 public:
40
41 void onToggleState(const String& instance, GenericToggleStateCallback cb);
42 bool sendToggleStateEvent(const String &instance, bool state, String cause = FSTR_SINRICPRO_PHYSICAL_INTERACTION);
43
44 protected:
45 bool handleToggleController(SinricProRequest &request);
46
47 private:
48 std::map<String, EventLimiter> event_limiter;
49 std::map<String, GenericToggleStateCallback> genericToggleStateCallback;
50};
51
52template <typename T>
54 T* device = static_cast<T*>(this);
55 device->registerRequestHandler(std::bind(&ToggleController<T>::handleToggleController, this, std::placeholders::_1));
56}
57
66template <typename T>
68 genericToggleStateCallback[instance] = cb;
69}
70
81template <typename T>
82bool ToggleController<T>::sendToggleStateEvent(const String &instance, bool state, String cause) {
83 if (event_limiter.find(instance) == event_limiter.end()) event_limiter[instance] = EventLimiter(EVENT_LIMIT_STATE);
84 if (event_limiter[instance]) return false;
85
86 T* device = static_cast<T*>(this);
87
92 return device->sendEvent(eventMessage);
93}
94
95template <typename T>
97 T* device = static_cast<T*>(this);
98
99 bool success = false;
100
101 if (request.action == FSTR_TOGGLE_setToggleState) {
102 bool powerState = request.request_value[FSTR_TOGGLE_state] == FSTR_TOGGLE_On ? true : false;
103 if (genericToggleStateCallback.find(request.instance) != genericToggleStateCallback.end())
104 success = genericToggleStateCallback[request.instance](device->deviceId, request.instance, powerState);
106 return success;
107 }
108 return success;
109}
110
111} // SINRICPRO_NAMESPACE
112
113template <typename T>
114using ToggleController = SINRICPRO_NAMESPACE::ToggleController<T>;
AirQuality.
Definition AirQualitySensor.h:19
ToggleController.
Definition ToggleController.h:37
std::function< bool(const String &, const String &, bool &)> GenericToggleStateCallback
Callback definition for onToggleState function.
Definition ToggleController.h:29