SinricPro Library
Loading...
Searching...
No Matches
SinricProModuleCommandHandler.h
1/*
2 * Copyright (c) 2019 Sinric. All rights reserved.
3 * Licensed under Creative Commons Attribution-Share Alike (CC BY-SA)
4 *
5 * This file is part of the Sinric Pro (https://github.com/sinricpro/)
6 */
7
8#pragma once
9
10#include "SinricProRequest.h"
11#include "SinricProStrings.h"
12#include "SinricProNamespace.h"
13#include "SinricProDebug.h"
14
15namespace SINRICPRO_NAMESPACE {
16
17FSTR(OTA, otaUpdateAvailable); // "otaUpdateAvailable"
18FSTR(OTA, url); // "url"
19FSTR(OTA, version); // "version"
20FSTR(OTA, major); // "major"
21FSTR(OTA, minor); // "minor"
22FSTR(OTA, patch); // "patch"
23FSTR(OTA, forceUpdate); // "forceUpdate"
24FSTR(SETTINGS, setSetting); // "setSetting"
25FSTR(SETTINGS, id); // "id"
26FSTR(SETTINGS, value); // "value"
27FSTR(INSIGHTS, health); // "health"
28FSTR(INSIGHTS, report); // "report"
29
30using OTAUpdateCallbackHandler = std::function<bool(const String& url, int major, int minor, int patch, bool forceUpdate)>;
31using SetSettingCallbackHandler = std::function<bool(const String& id, const String& value)>;
32using ReportHealthCallbackHandler = std::function<bool(String& healthReport)>;
33
34class SinricProModuleCommandHandler {
35 public:
36 SinricProModuleCommandHandler();
37 ~SinricProModuleCommandHandler();
38
39 bool handleRequest(SinricProRequest &request);
40 void onOTAUpdate(OTAUpdateCallbackHandler callback);
41 void onSetSetting(SetSettingCallbackHandler callback);
42 void onReportHealth(ReportHealthCallbackHandler callback);
43
44 private:
45 OTAUpdateCallbackHandler _otaUpdateCallbackHandler;
46 SetSettingCallbackHandler _setSettingCallbackHandler;
47 ReportHealthCallbackHandler _reportHealthCallbackHandler;
48};
49
50SinricProModuleCommandHandler::SinricProModuleCommandHandler()
51 : _otaUpdateCallbackHandler(nullptr),
52 _setSettingCallbackHandler(nullptr),
53 _reportHealthCallbackHandler(nullptr) {}
54
55SinricProModuleCommandHandler::~SinricProModuleCommandHandler() {}
56
57void SinricProModuleCommandHandler::onOTAUpdate(OTAUpdateCallbackHandler callback) {
58 _otaUpdateCallbackHandler = callback;
59}
60
61void SinricProModuleCommandHandler::onSetSetting(SetSettingCallbackHandler callback) {
62 _setSettingCallbackHandler = callback;
63}
64
65void SinricProModuleCommandHandler::onReportHealth(ReportHealthCallbackHandler callback) {
66 _reportHealthCallbackHandler = callback;
67}
68
69bool SinricProModuleCommandHandler::handleRequest(SinricProRequest &request) {
70 if (strcmp(FSTR_OTA_otaUpdateAvailable, request.action.c_str()) == 0 && _otaUpdateCallbackHandler) {
71 String url = request.request_value[FSTR_OTA_url];
72 int major = request.request_value[FSTR_OTA_version][FSTR_OTA_major];
73 int minor = request.request_value[FSTR_OTA_version][FSTR_OTA_minor];
74 int patch = request.request_value[FSTR_OTA_version][FSTR_OTA_patch];
75 bool forceUpdate = request.request_value[FSTR_OTA_version][FSTR_OTA_forceUpdate] | false;
76 return _otaUpdateCallbackHandler(url, major, minor, patch, forceUpdate);
77 }
78 else if (strcmp(FSTR_SETTINGS_setSetting, request.action.c_str()) == 0 && _setSettingCallbackHandler) {
79 String id = request.request_value[FSTR_SETTINGS_id];
80 String value = request.request_value[FSTR_SETTINGS_value];
81 return _setSettingCallbackHandler(id, value);
82 }
83 else if (strcmp(FSTR_INSIGHTS_health, request.action.c_str()) == 0 && _reportHealthCallbackHandler) {
84 String healthReport = "";
85 bool success = _reportHealthCallbackHandler(healthReport);
86 if (success) {
87 request.response_value[FSTR_INSIGHTS_report] = healthReport;
88 }
89 return success;
90 }
91 else {
92 DEBUG_SINRIC("[SinricProModuleCommandHandler:handleRequest]: action: %s not supported!\r\n", request.action.c_str());
93 }
94 return false;
95}
96
97} // SINRICPRO_NAMESPACE
std::function< bool(const String &url, int major, int minor, int patch, bool enforce)> OTAUpdateCallbackHandler
Function signature for OTA update callback.
Definition SinricPro.h:54
std::function< bool(String &healthReport)> ReportHealthCallbackHandler
Defines a function type for reporting device health status.
Definition SinricPro.h:80
std::function< bool(const String &id, const String &value)> SetSettingCallbackHandler
Function signature for setting a module setting.
Definition SinricPro.h:65