3 #include "../SinricProRequest.h"
4 #include "../EventLimiter.h"
5 #include "../SinricProStrings.h"
7 #include "../SinricProNamespace.h"
8 namespace SINRICPRO_NAMESPACE {
10 FSTR(CHANNEL, changeChannel);
11 FSTR(CHANNEL, channel);
13 FSTR(CHANNEL, number);
14 FSTR(CHANNEL, skipChannels);
15 FSTR(CHANNEL, channelCount);
80 bool handleChannelController(SinricProRequest &request);
83 EventLimiter event_limiter;
91 : event_limiter(EVENT_LIMIT_STATE) {
92 T* device =
static_cast<T*
>(
this);
103 template <
typename T>
105 changeChannelCallback = cb;
115 template <
typename T>
117 changeChannelNumberCallback = cb;
127 template <
typename T>
129 skipChannelsCallback = cb;
141 template <
typename T>
143 if (event_limiter)
return false;
144 T* device =
static_cast<T*
>(
this);
146 JsonDocument eventMessage = device->prepareEvent(FSTR_CHANNEL_changeChannel, cause.c_str());
147 JsonObject event_value = eventMessage[FSTR_SINRICPRO_payload][FSTR_SINRICPRO_value];
148 event_value[FSTR_CHANNEL_channel][FSTR_CHANNEL_name] = channelName;
149 return device->sendEvent(eventMessage);
152 template <
typename T>
154 T* device =
static_cast<T*
>(
this);
156 bool success =
false;
158 if (request.action == FSTR_CHANNEL_changeChannel) {
160 if (changeChannelCallback && request.request_value[FSTR_CHANNEL_channel].containsKey(FSTR_CHANNEL_name)) {
161 String channelName = request.request_value[FSTR_CHANNEL_channel][FSTR_CHANNEL_name] |
"";
162 success = changeChannelCallback(device->deviceId, channelName);
163 request.response_value[FSTR_CHANNEL_channel][FSTR_CHANNEL_name] = channelName;
166 if (changeChannelNumberCallback && request.request_value[FSTR_CHANNEL_channel].containsKey(FSTR_CHANNEL_number)) {
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;
175 if (skipChannelsCallback && request.action == FSTR_CHANNEL_skipChannels) {
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;
188 template <
typename T>
189 using ChannelController = SINRICPRO_NAMESPACE::ChannelController<T>;
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