SinricPro Library
VolumeController.h
1 #ifndef _VOLUMECONTROLLER_H_
2 #define _VOLUMECONTROLLER_H_
3 
4 #include "SinricProRequest.h"
5 
10 template <typename T>
12  public:
13  VolumeController() { static_cast<T &>(*this).requestHandlers.push_back(std::bind(&VolumeController<T>::handleVolumeController, this, std::placeholders::_1)); }
28  using SetVolumeCallback = std::function<bool(const String &, int &)>;
29 
45  using AdjustVolumeCallback = std::function<bool(const String &, int &, bool)>;
46 
49 
50  bool sendVolumeEvent(int volume, String cause = "PHYSICAL_INTERACTION");
51 
52  protected:
53  bool handleVolumeController(SinricProRequest &request);
54 
55  private:
56  SetVolumeCallback volumeCallback;
57  AdjustVolumeCallback adjustVolumeCallback;
58 };
59 
67 template <typename T>
68 void VolumeController<T>::onSetVolume(SetVolumeCallback cb) { volumeCallback = cb; }
69 
77 template <typename T>
78 void VolumeController<T>::onAdjustVolume(AdjustVolumeCallback cb) { adjustVolumeCallback = cb; }
79 
89 template <typename T>
90 bool VolumeController<T>::sendVolumeEvent(int volume, String cause) {
91  T& device = static_cast<T&>(*this);
92 
93  DynamicJsonDocument eventMessage = device.prepareEvent("setVolume", cause.c_str());
94  JsonObject event_value = eventMessage["payload"]["value"];
95  event_value["volume"] = volume;
96  return device.sendEvent(eventMessage);
97 }
98 
99 template <typename T>
100 bool VolumeController<T>::handleVolumeController(SinricProRequest &request) {
101  T &device = static_cast<T &>(*this);
102 
103  bool success = false;
104 
105  if (volumeCallback && request.action == "setVolume") {
106  int volume = request.request_value["volume"];
107  success = volumeCallback(device.deviceId, volume);
108  request.response_value["volume"] = volume;
109  return success;
110  }
111 
112  if (adjustVolumeCallback && request.action == "adjustVolume") {
113  int volume = request.request_value["volume"];
114  bool volumeDefault = request.request_value["volumeDefault"] | false;
115  success = adjustVolumeCallback(device.deviceId, volume, volumeDefault);
116  request.response_value["volume"] = volume;
117  return success;
118  }
119  return success;
120 }
121 
122 #endif
VolumeController.
Definition: VolumeController.h:11
bool sendVolumeEvent(int volume, String cause="PHYSICAL_INTERACTION")
Send setVolume event to SinricPro Server indicating actual volume has changed.
Definition: VolumeController.h:90
void onAdjustVolume(AdjustVolumeCallback cb)
Set callback function for adjustVolume request.
Definition: VolumeController.h:78
std::function< bool(const String &, int &)> SetVolumeCallback
Callback definition for onSetVolume function.
Definition: VolumeController.h:28
void onSetVolume(SetVolumeCallback cb)
Set callback function for setVolume request.
Definition: VolumeController.h:68
std::function< bool(const String &, int &, bool)> AdjustVolumeCallback
Callback definition for onAdjustVolume function.
Definition: VolumeController.h:45