Fork of the espurna firmware for `mhsw` switches
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

68 lines
2.3 KiB

/*
WEBSOCKET MODULE
Copyright (C) 2016-2019 by Xose Pérez <xose dot perez at gmail dot com>
*/
#pragma once
#include <ArduinoJson.h>
#include <queue>
#include <functional>
#include <vector>
#include "web.h"
#include "utils.h"
using ws_on_send_callback_f = std::function<void(JsonObject& root)>;
using ws_on_action_callback_f = std::function<void(uint32_t client_id, const char * action, JsonObject& data)>;
using ws_on_keycheck_callback_f = std::function<bool(const char * key, JsonVariant& value)>;
using ws_on_send_callback_list_t = std::vector<ws_on_send_callback_f>;
using ws_on_action_callback_list_t = std::vector<ws_on_action_callback_f>;
using ws_on_keycheck_callback_list_t = std::vector<ws_on_keycheck_callback_f>;
struct ws_callbacks_t {
ws_on_send_callback_list_t on_visible;
ws_on_send_callback_list_t on_connected;
ws_on_send_callback_list_t on_data;
ws_on_action_callback_list_t on_action;
ws_on_keycheck_callback_list_t on_keycheck;
ws_callbacks_t& onVisible(ws_on_send_callback_f);
ws_callbacks_t& onConnected(ws_on_send_callback_f);
ws_callbacks_t& onData(ws_on_send_callback_f);
ws_callbacks_t& onAction(ws_on_action_callback_f);
ws_callbacks_t& onKeyCheck(ws_on_keycheck_callback_f);
};
ws_callbacks_t& wsRegister();
void wsSetup();
void wsSend(uint32_t client_id, const char* data);
void wsSend(uint32_t client_id, JsonObject& root);
void wsSend(JsonObject& root);
void wsSend(ws_on_send_callback_f callback);
void wsSend_P(PGM_P data);
void wsSend_P(uint32_t client_id, PGM_P data);
void INLINE wsPost(const ws_on_send_callback_f& callback);
void INLINE wsPost(uint32_t client_id, const ws_on_send_callback_f& callback);
void INLINE wsPost(const ws_on_send_callback_list_t& callbacks);
void INLINE wsPost(uint32_t client_id, const ws_on_send_callback_list_t& callbacks);
void INLINE wsPostAll(uint32_t client_id, const ws_on_send_callback_list_t& callbacks);
void INLINE wsPostAll(const ws_on_send_callback_list_t& callbacks);
void INLINE wsPostSequence(uint32_t client_id, const ws_on_send_callback_list_t& callbacks);
void INLINE wsPostSequence(uint32_t client_id, ws_on_send_callback_list_t&& callbacks);
void INLINE wsPostSequence(const ws_on_send_callback_list_t& callbacks);
bool INLINE wsConnected();
bool INLINE wsConnected(uint32_t client_id);
bool wsDebugSend(const char* prefix, const char* message);