src/ESPStepperMotorServer.cpp
void ESPStepperMotorServer::onWebSocketEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len)
{
    if (type == WS_EVT_CONNECT)
    {
        ESPStepperMotorServer_Logger::logInfof("ws[%s][%u] connect\n", server->url(), client->id());
        client->printf("Hello Client %u :)", client->id());
        client->ping();
    }
    else if (type == WS_EVT_DISCONNECT)
    {
        ESPStepperMotorServer_Logger::logInfof("ws[%s][%i] disconnect: %i\n", server->url(), client->id(), client->id());
    }
    else if (type == WS_EVT_ERROR)
    {
        ESPStepperMotorServer_Logger::logWarningf("ws[%s][%u] error(%i): %s\n", server->url(), client->id(), *((uint16_t *)arg), (char *)data);
    }
    else if (type == WS_EVT_PONG)
    {
        ESPStepperMotorServer_Logger::logInfof("ws[%s][%i] pong[%i]: %s\n", server->url(), client->id(), (int)len, (len) ? (char *)data : "");
    }
    else if (type == WS_EVT_DATA)
    {
        AwsFrameInfo *info = (AwsFrameInfo *)arg;
        String msg = "";
        if (info->final && info->index == 0 && info->len == len)
        {
            //the whole message is in a single frame and we got all of it's data
            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];
                }
                String commandFromClient = String((char *)data);
                if (commandFromClient.equals("status"))
                {
                    client->text("Here is your status: OK");
                }
            }
            else
            {
                char buff[10];
                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");
        }
        else
        {
            //message is comprised of multiple frames or the frame is split into multiple packets
            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[10];
                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");
                }
            }
        }
    }
}
//TODO: test this part and implement usefull behavior
test this part and implement usefull behavior
test this part and implement usefull behavior
void ESPStepperMotorServer::onWebSocketEvent(AsyncWebSocket *server, AsyncWebSocketClient *client, AwsEventType type, void *arg, uint8_t *data, size_t len)
{
    if (type == WS_EVT_CONNECT)
    {
        ESPStepperMotorServer_Logger::logInfof("ws[%s][%u] connect\n", server->url(), client->id());
        client->printf("Hello Client %u :)", client->id());
        client->ping();
    }
    else if (type == WS_EVT_DISCONNECT)
    {
        ESPStepperMotorServer_Logger::logInfof("ws[%s][%i] disconnect: %i\n", server->url(), client->id(), client->id());
    }
    else if (type == WS_EVT_ERROR)
    {
        ESPStepperMotorServer_Logger::logWarningf("ws[%s][%u] error(%i): %s\n", server->url(), client->id(), *((uint16_t *)arg), (char *)data);
    }
    else if (type == WS_EVT_PONG)
    {
        ESPStepperMotorServer_Logger::logInfof("ws[%s][%i] pong[%i]: %s\n", server->url(), client->id(), (int)len, (len) ? (char *)data : "");
    }
    else if (type == WS_EVT_DATA)
    {
        AwsFrameInfo *info = (AwsFrameInfo *)arg;
        String msg = "";
        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];
                }
                String commandFromClient = String((char *)data);
                if (commandFromClient.equals("status"))
                {
                    client->text("Here is your status: OK");
                }
            }
            else
            {
                char buff[10];
                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");
        }
        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[10];
                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");
                }
            }
        }
    }
}
void ESPStepperMotorServer :: onWebSocketEvent ( AsyncWebSocket * server , AsyncWebSocketClient * client , AwsEventType type , void * arg , uint8_t * data , size_t len ) { if ( type == WS_EVT_CONNECT ) { ESPStepperMotorServer_Logger :: logInfof ( " \n " , server -> url ( ) , client -> id ( ) ) ; client -> printf ( " " , client -> id ( ) ) ; client -> ping ( ) ; } else if ( type == WS_EVT_DISCONNECT ) { ESPStepperMotorServer_Logger :: logInfof ( " \n " , server -> url ( ) , client -> id ( ) , client -> id ( ) ) ; } else if ( type == WS_EVT_ERROR ) { ESPStepperMotorServer_Logger :: logWarningf ( " \n " , server -> url ( ) , client -> id ( ) , * ( ( uint16_t * ) arg ) , ( char * ) data ) ; } else if ( type == WS_EVT_PONG ) { ESPStepperMotorServer_Logger :: logInfof ( " \n " , server -> url ( ) , client -> id ( ) , ( int ) len , ( len ) ? ( char * ) data : " " ) ; } else if ( type == WS_EVT_DATA ) { AwsFrameInfo * info = ( AwsFrameInfo * ) arg ; String msg = " " ; if ( info -> final && info -> index == 0 && info -> len == len ) { Serial . printf ( " " , server -> url ( ) , client -> id ( ) , ( info -> opcode == WS_TEXT ) ? " " : " " , info -> len ) ; if ( info -> opcode == WS_TEXT ) { for ( size_t i = 0 ; i < info -> len ; i ++ ) { msg += ( char ) data [ i ] ; } String commandFromClient = String ( ( char * ) data ) ; if ( commandFromClient . equals ( " " ) ) { client -> text ( " " ) ; } } else { char buff [ 10 ] ; for ( size_t i = 0 ; i < info -> len ; i ++ ) { sprintf ( buff , " " , ( uint8_t ) data [ i ] ) ; msg += buff ; } } Serial . printf ( " \n " , msg . c_str ( ) ) ; if ( info -> opcode == WS_TEXT ) client -> text ( " " ) ; else client -> binary ( " " ) ; } else { if ( info -> index == 0 ) { if ( info -> num == 0 ) Serial . printf ( " \n " , server -> url ( ) , client -> id ( ) , ( info -> message_opcode == WS_TEXT ) ? " " : " " ) ; Serial . printf ( " \n " , server -> url ( ) , client -> id ( ) , info -> num , info -> len ) ; } Serial . printf ( " " , server -> url ( ) , client -> id ( ) , info -> num , ( info -> message_opcode == WS_TEXT ) ? " " : " " , 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 [ 10 ] ; for ( size_t i = 0 ; i < info -> len ; i ++ ) { sprintf ( buff , " " , ( uint8_t ) data [ i ] ) ; msg += buff ; } } Serial . printf ( " \n " , msg . c_str ( ) ) ; if ( ( info -> index + len ) == info -> len ) { Serial . printf ( " \n " , server -> url ( ) , client -> id ( ) , info -> num , info -> len ) ; if ( info -> final ) { Serial . printf ( " \n " , server -> url ( ) , client -> id ( ) , ( info -> message_opcode == WS_TEXT ) ? " " : " " ) ; if ( info -> message_opcode == WS_TEXT ) client -> text ( " " ) ; else client -> binary ( " " ) ; } } } } }
TODO: test this part and implement usefull behavior
TODO : test this part and implement usefull behavior
//the whole message is in a single frame and we got all of it's data //message is comprised of multiple frames or the frame is split into multiple packets