SinricPro Library
InputController.h
1 #ifndef _INPUTCONTROLLER_H_
2 #define _INPUTCONTROLLER_H_
3 
4 #include "SinricProRequest.h"
5 
10 template <typename T>
12  public:
13  InputController() { static_cast<T &>(*this).requestHandlers.push_back(std::bind(&InputController<T>::handleInputController, this, std::placeholders::_1)); }
28  using SelectInputCallback = std::function<bool(const String &, String &)>;
29 
31  bool sendSelectInputEvent(String intput, String cause = "PHYSICAL_INTERACTION");
32 
33  protected:
34  bool handleInputController(SinricProRequest &request);
35 
36  private:
37  SelectInputCallback selectInputCallback;
38 };
39 
47 template <typename T>
49  selectInputCallback = cb;
50 }
51 
61 template <typename T>
62 bool InputController<T>::sendSelectInputEvent(String input, String cause) {
63  T& device = static_cast<T&>(*this);
64 
65  DynamicJsonDocument eventMessage = device.prepareEvent("selectInput", cause.c_str());
66  JsonObject event_value = eventMessage["payload"]["value"];
67  event_value["input"] = input;
68  return device.sendEvent(eventMessage);
69 }
70 
71 template <typename T>
72 bool InputController<T>::handleInputController(SinricProRequest &request) {
73  T &device = static_cast<T &>(*this);
74 
75  bool success = false;
76 
77  if (selectInputCallback && request.action == "selectInput") {
78  String input = request.request_value["input"];
79  success = selectInputCallback(device.deviceId, input);
80  request.response_value["input"] = input;
81  return success;
82  }
83 
84  return success;
85 }
86 
87 #endif
InputController.
Definition: InputController.h:11
void onSelectInput(SelectInputCallback cb)
Set callback function for selectInput request.
Definition: InputController.h:48
std::function< bool(const String &, String &)> SelectInputCallback
Callback definition for onSelectInput function.
Definition: InputController.h:28
bool sendSelectInputEvent(String intput, String cause="PHYSICAL_INTERACTION")
Send selectInput event to SinricPro Server to report selected input.
Definition: InputController.h:62