From 616f392f6263fb824eb430e2b2c2ade6bef9c813 Mon Sep 17 00:00:00 2001 From: Patrick Balsiger Date: Thu, 15 Nov 2018 12:46:13 +0100 Subject: [PATCH] add utils to main lib --- .../utils}/utils_print.cpp | 2 +- .../utils}/utils_print.h | 0 src/utils/utils_web.h | 132 ++++++++++++++++++ 3 files changed, 133 insertions(+), 1 deletion(-) rename {lib/sprocket-utils => src/utils}/utils_print.cpp (97%) rename {lib/sprocket-utils => src/utils}/utils_print.h (100%) create mode 100644 src/utils/utils_web.h diff --git a/lib/sprocket-utils/utils_print.cpp b/src/utils/utils_print.cpp similarity index 97% rename from lib/sprocket-utils/utils_print.cpp rename to src/utils/utils_print.cpp index 20425ee..81fe4b2 100644 --- a/lib/sprocket-utils/utils_print.cpp +++ b/src/utils/utils_print.cpp @@ -20,6 +20,6 @@ void PRINT_MSG(Print &out, const char* prefix, const char* format, ...) { vsnprintf(ptr, sizeof(formatString)-1-strlen(formatString), formatString, args ); va_end (args); formatString[ sizeof(formatString)-1 ]='\0'; - out.print(ptr); + out.println(ptr); } } \ No newline at end of file diff --git a/lib/sprocket-utils/utils_print.h b/src/utils/utils_print.h similarity index 100% rename from lib/sprocket-utils/utils_print.h rename to src/utils/utils_print.h diff --git a/src/utils/utils_web.h b/src/utils/utils_web.h new file mode 100644 index 0000000..0ff8d4a --- /dev/null +++ b/src/utils/utils_web.h @@ -0,0 +1,132 @@ +#ifndef __WebUtils_H___ +#define __WebUtils_H___ + +#include +#include +#include +#include + +class WebUtils { + public: + static String getRequestParameterOrDefault(AsyncWebServerRequest *request, String param, String defaultValue, bool isPost = true){ + if(request->hasParam(param, isPost)) { + return request->getParam(param, isPost)->value(); + } + return defaultValue; + } + static String parseFrame(AwsEventType type, void * arg, uint8_t *data, size_t len) { + String msg = ""; + if(type == WS_EVT_DATA){ + AwsFrameInfo * info = (AwsFrameInfo*)arg; + if(info->opcode == WS_TEXT){ + for(size_t i=0; i < info->len; i++) { + msg += (char) data[i]; + } + } else { + char buff[3]; + for(size_t i=0; i < info->len; i++) { + sprintf(buff, "%02x ", (uint8_t) data[i]); + msg += buff ; + } + } + + } + return msg; + } + static String parseFrameAsString(AwsEventType type, void * arg, uint8_t *data, size_t len, int start = 0) { + String msg = ""; + if(type == WS_EVT_DATA){ + AwsFrameInfo * info = (AwsFrameInfo*)arg; + //if(info->final && info->index == 0 && info->len == len){ + if(info->opcode == WS_TEXT){ + for(size_t i=start; i < info->len; i++) { + msg += (char) data[i]; + } + } else { + char buff[3]; + for(size_t i=start; i < info->len; i++) { + sprintf(buff, "%02x ", (uint8_t) data[i]); + msg += buff ; + } + } + + //} + } + return msg; + } + /* static void onWsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len) { + if(type == WS_EVT_CONNECT){ + Serial.printf("ws[%s][%u] connect\n", server->url(), client->id()); + client->printf("Hello Client %u :)", client->id()); + client->ping(); + } else if(type == WS_EVT_DISCONNECT){ + Serial.printf("ws[%s][%u] disconnect: %u\n", server->url(), client->id()); + } else if(type == WS_EVT_ERROR){ + Serial.printf("ws[%s][%u] error(%u): %s\n", server->url(), client->id(), *((uint16_t*)arg), (char*)data); + } else if(type == WS_EVT_PONG){ + Serial.printf("ws[%s][%u] pong[%u]: %s\n", server->url(), client->id(), len, (len)?(char*)data:""); + } else if(type == WS_EVT_DATA){ + AwsFrameInfo * info = (AwsFrameInfo*)arg; + String msg = ""; + //the whole message is in a single frame and we got all of it's data + if(info->final && info->index == 0 && info->len == len){ + Serial.printf("ws[%s][%u] %s-message[%llu]: ", server->url(), client->id(), (info->opcode == WS_TEXT)?"text":"binary", info->len); + + if(info->opcode == WS_TEXT){ + for(size_t i=0; i < info->len; i++) { + msg += (char) data[i]; + } + } else { + char buff[3]; + for(size_t i=0; i < info->len; i++) { + sprintf(buff, "%02x ", (uint8_t) data[i]); + msg += buff ; + } + } + Serial.printf("%s\n",msg.c_str()); + + if(info->opcode == WS_TEXT) + client->text("I got your text message"); + else + client->binary("I got your binary message"); + } + //message is comprised of multiple frames or the frame is split into multiple packets + else { + if(info->index == 0){ + if(info->num == 0) + Serial.printf("ws[%s][%u] %s-message start\n", server->url(), client->id(), (info->message_opcode == WS_TEXT)?"text":"binary"); + Serial.printf("ws[%s][%u] frame[%u] start[%llu]\n", server->url(), client->id(), info->num, info->len); + } + + Serial.printf("ws[%s][%u] frame[%u] %s[%llu - %llu]: ", server->url(), client->id(), info->num, (info->message_opcode == WS_TEXT)?"text":"binary", info->index, info->index + len); + + if(info->opcode == WS_TEXT){ + for(size_t i=0; i < info->len; i++) { + msg += (char) data[i]; + } + } else { + char buff[3]; + for(size_t i=0; i < info->len; i++) { + sprintf(buff, "%02x ", (uint8_t) data[i]); + msg += buff ; + } + } + Serial.printf("%s\n",msg.c_str()); + + if((info->index + len) == info->len){ + Serial.printf("ws[%s][%u] frame[%u] end[%llu]\n", server->url(), client->id(), info->num, info->len); + if(info->final){ + Serial.printf("ws[%s][%u] %s-message end\n", server->url(), client->id(), (info->message_opcode == WS_TEXT)?"text":"binary"); + if(info->message_opcode == WS_TEXT) + client->text("I got your text message"); + else + client->binary("I got your binary message"); + } + } + } + } + } */ + +}; + +#endif \ No newline at end of file