SinricPro Library
Loading...
Searching...
No Matches
ChannelController.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(CHANNEL, changeChannel); // "changeChannel"
11FSTR(CHANNEL, channel); // "channel"
12FSTR(CHANNEL, name); // "name"
13FSTR(CHANNEL, number); // "number"
14FSTR(CHANNEL, skipChannels); // "skipChannels"
15FSTR(CHANNEL, channelCount); // "channelCount"
16
31using ChangeChannelCallback = std::function<bool(const String &, String &)>;
32
47using ChangeChannelNumberCallback = std::function<bool(const String &, int, String &)>;
48
63using SkipChannelsCallback = std::function<bool(const String &, int, String &)>;
64
69template <typename T>
71 public:
73
77
79 protected:
80 bool handleChannelController(SinricProRequest &request);
81
82 private:
83 EventLimiter event_limiter;
84 ChangeChannelCallback changeChannelCallback;
85 ChangeChannelNumberCallback changeChannelNumberCallback;
86 SkipChannelsCallback skipChannelsCallback;
87};
88
89template <typename T>
91: event_limiter(EVENT_LIMIT_STATE) {
92 T* device = static_cast<T*>(this);
93 device->registerRequestHandler(std::bind(&ChannelController<T>::handleChannelController, this, std::placeholders::_1));
94}
95
103template <typename T>
105 changeChannelCallback = cb;
106}
107
115template <typename T>
117 changeChannelNumberCallback = cb;
118}
119
127template <typename T>
129 skipChannelsCallback = cb;
130}
131
141template <typename T>
143 if (event_limiter) return false;
144 T* device = static_cast<T*>(this);
145
149 return device->sendEvent(eventMessage);
150}
151
152template <typename T>
154 T* device = static_cast<T*>(this);
155
156 bool success = false;
157
158 if (request.action == FSTR_CHANNEL_changeChannel) {
159
160 if (changeChannelCallback && request.request_value[FSTR_CHANNEL_channel][FSTR_CHANNEL_name].is<String>()) {
161 String channelName = request.request_value[FSTR_CHANNEL_channel][FSTR_CHANNEL_name] | "";
162 success = changeChannelCallback(device->deviceId, channelName);
164 }
165
166 if (changeChannelNumberCallback && request.request_value[FSTR_CHANNEL_channel][FSTR_CHANNEL_number].is<String>()) {
167 String channelName("");
168 int channelNumber = request.request_value[FSTR_CHANNEL_channel][FSTR_CHANNEL_number];
169 success = changeChannelNumberCallback(device->deviceId, channelNumber, channelName);
170 request.response_value[FSTR_CHANNEL_channel][FSTR_CHANNEL_name] = channelName;
171 }
172 return success;
173 }
174
175 if (skipChannelsCallback && request.action == FSTR_CHANNEL_skipChannels) {
176 String channelName;
177 int channelCount = request.request_value[FSTR_CHANNEL_channelCount] | 0;
178 success = skipChannelsCallback(device->deviceId, channelCount, channelName);
179 request.response_value[FSTR_CHANNEL_channel][FSTR_CHANNEL_name] = channelName;
180 return success;
181 }
182
183 return success;
184}
185
186} // SINRICPRO_NAMESPACE
187
188template <typename T>
189using ChannelController = SINRICPRO_NAMESPACE::ChannelController<T>;
AirQuality.
Definition AirQualitySensor.h:19
ChannelController.
Definition ChannelController.h:70
void onChangeChannel(ChangeChannelCallback cb)
Set callback function for changeChannel request.
Definition ChannelController.h:104
void onSkipChannels(SkipChannelsCallback cb)
Set callback function for skipChannels request.
Definition ChannelController.h:128
void onChangeChannelNumber(ChangeChannelNumberCallback cb)
Set callback function for changeChannel request.
Definition ChannelController.h:116
bool sendChangeChannelEvent(String channelName, String cause=FSTR_SINRICPRO_PHYSICAL_INTERACTION)
Send changeChannel event to SinricPro Server to report selected channel.
Definition ChannelController.h:142
std::function< bool(const String &, int, String &)> SkipChannelsCallback
Callback definition for onSkipChannels function.
Definition ChannelController.h:63
std::function< bool(const String &, String &)> ChangeChannelCallback
Callback definition for onChangeChannel function.
Definition ChannelController.h:31
std::function< bool(const String &, int, String &)> ChangeChannelNumberCallback
Callback definition for onChangeChannelNumber function.
Definition ChannelController.h:47