SinricPro Library
MuteController.h
1 #ifndef _MUTECONTROLLER_H_
2 #define _MUTECONTROLLER_H_
3 
4 #include "SinricProRequest.h"
5 
10 template <typename T>
12  public:
13  MuteController() { static_cast<T &>(*this).requestHandlers.push_back(std::bind(&MuteController<T>::handleMuteController, this, std::placeholders::_1)); }
28  using MuteCallback = std::function<bool(const String &, bool &)>;
29 
30  void onMute(MuteCallback cb);
31  bool sendMuteEvent(bool mute, String cause = "PHYSICAL_INTERACTION");
32  protected:
33  bool handleMuteController(SinricProRequest &request);
34 
35  private:
36  MuteCallback muteCallback;
37 };
38 
46 template <typename T>
47 void MuteController<T>::onMute(MuteCallback cb) { muteCallback = cb; }
48 
58 template <typename T>
59 bool MuteController<T>::sendMuteEvent(bool mute, String cause) {
60  T& device = static_cast<T&>(*this);
61 
62  DynamicJsonDocument eventMessage = device.prepareEvent("setMute", cause.c_str());
63  JsonObject event_value = eventMessage["payload"]["value"];
64  event_value["mute"] = mute;
65  return device.sendEvent(eventMessage);
66 }
67 
68 template <typename T>
69 bool MuteController<T>::handleMuteController(SinricProRequest &request) {
70  T &device = static_cast<T &>(*this);
71 
72  bool success = false;
73 
74  if (muteCallback && request.action == "setMute") {
75  bool mute = request.request_value["mute"];
76  success = muteCallback(device.deviceId, mute);
77  request.response_value["mute"] = mute;
78  return success;
79  }
80  return success;
81 }
82 
83 #endif
MuteController.
Definition: MuteController.h:11
std::function< bool(const String &, bool &)> MuteCallback
Callback definition for onMute function.
Definition: MuteController.h:28
void onMute(MuteCallback cb)
Set callback function for setMute request.
Definition: MuteController.h:47
bool sendMuteEvent(bool mute, String cause="PHYSICAL_INTERACTION")
Send setMute event to SinricPro Server indicating actual mute state.
Definition: MuteController.h:59