SinricPro Library
MuteController.h
1 #pragma once
2 
3 #include "../SinricProRequest.h"
4 #include "../EventLimiter.h"
5 #include "../SinricProStrings.h"
6 
7 #include "../SinricProNamespace.h"
8 namespace SINRICPRO_NAMESPACE {
9 
10 FSTR(MUTE, mute); // "mute"
11 FSTR(MUTE, setMute); // "setMute"
12 
27 using MuteCallback = std::function<bool(const String &, bool &)>;
28 
29 
34 template <typename T>
36  public:
38 
39  void onMute(MuteCallback cb);
40  bool sendMuteEvent(bool mute, String cause = FSTR_SINRICPRO_PHYSICAL_INTERACTION);
41  protected:
42  bool handleMuteController(SinricProRequest &request);
43 
44  private:
45  EventLimiter event_limiter;
46  MuteCallback muteCallback;
47 };
48 
49 template <typename T>
51 :event_limiter(EVENT_LIMIT_STATE) {
52  T* device = static_cast<T*>(this);
53  device->registerRequestHandler(std::bind(&MuteController<T>::handleMuteController, this, std::placeholders::_1));
54 }
55 
63 template <typename T>
64 void MuteController<T>::onMute(MuteCallback cb) { muteCallback = cb; }
65 
75 template <typename T>
76 bool MuteController<T>::sendMuteEvent(bool mute, String cause) {
77  if (event_limiter) return false;
78  T* device = static_cast<T*>(this);
79 
80  JsonDocument eventMessage = device->prepareEvent(FSTR_MUTE_setMute, cause.c_str());
81  JsonObject event_value = eventMessage[FSTR_SINRICPRO_payload][FSTR_SINRICPRO_value];
82  event_value[FSTR_MUTE_mute] = mute;
83  return device->sendEvent(eventMessage);
84 }
85 
86 template <typename T>
87 bool MuteController<T>::handleMuteController(SinricProRequest &request) {
88  T* device = static_cast<T*>(this);
89 
90  bool success = false;
91 
92  if (muteCallback && request.action == FSTR_MUTE_setMute) {
93  bool mute = request.request_value[FSTR_MUTE_mute];
94  success = muteCallback(device->deviceId, mute);
95  request.response_value[FSTR_MUTE_mute] = mute;
96  return success;
97  }
98  return success;
99 }
100 
101 } // SINRICPRO_NAMESPACE
102 
103 template <typename T>
104 using MuteController = SINRICPRO_NAMESPACE::MuteController<T>;
MuteController.
Definition: MuteController.h:35
bool sendMuteEvent(bool mute, String cause=FSTR_SINRICPRO_PHYSICAL_INTERACTION)
Send setMute event to SinricPro Server indicating actual mute state.
Definition: MuteController.h:76
void onMute(MuteCallback cb)
Set callback function for setMute request.
Definition: MuteController.h:64
std::function< bool(const String &, bool &)> MuteCallback
Callback definition for onMute function.
Definition: MuteController.h:27