SinricPro Library
Loading...
Searching...
No Matches
SettingController.h
1#pragma once
2
3#include "../SinricProRequest.h"
4#include "../SinricProStrings.h"
5
6#include "../SinricProNamespace.h"
7namespace SINRICPRO_NAMESPACE {
8
9using SetSettingCallback = std::function<bool(const String&, const String&, String&)>;
10
11FSTR(SETTING, setSetting); // "setSetting"
12FSTR(SETTING, id); // "id"
13FSTR(SETTING, value); // "value"
14
15template <typename T>
16class SettingController {
17 public:
18 SettingController();
19 void onSetSetting(SetSettingCallback cb);
20
21 protected:
22 bool handleSettingController(SinricProRequest &request);
23
24 private:
25 SetSettingCallback setSettingCallback;
26};
27
28template <typename T>
29SettingController<T>::SettingController() {
30 T* device = static_cast<T*>(this);
31 device->registerRequestHandler(std::bind(&SettingController<T>::handleSettingController, this, std::placeholders::_1));
32}
33
34template <typename T>
35void SettingController<T>::onSetSetting(SetSettingCallback cb) {
36 setSettingCallback = cb;
37}
38
39template <typename T>
40bool SettingController<T>::handleSettingController(SinricProRequest &request) {
41 T* device = static_cast<T*>(this);
42
43 bool success = false;
44
45 if (setSettingCallback && request.action == FSTR_SETTING_setSetting) {
46 String settingId = request.request_value[FSTR_SETTING_id] | "";
47 String settingValue = request.request_value[FSTR_SETTING_value] | "";
48 success = setSettingCallback(device->deviceId, settingId, settingValue);
49 request.response_value[FSTR_SETTING_id] = settingId;
50 request.response_value[FSTR_SETTING_value] = settingValue;
51 return success;
52 }
53
54 return success;
55}
56
57} // SINRICPRO_NAMESPACE
58
59template <typename T>
60using SettingController = SINRICPRO_NAMESPACE::SettingController<T>;