mirror of
https://github.com/espressif/esp-protocols.git
synced 2025-07-14 19:16:32 +02:00
Merge pull request #93 from gabsuren/feature/websocket_json_example
websocket: updated example to show how to transfer json data
This commit is contained in:
@ -23,6 +23,7 @@
|
|||||||
#include "esp_log.h"
|
#include "esp_log.h"
|
||||||
#include "esp_websocket_client.h"
|
#include "esp_websocket_client.h"
|
||||||
#include "esp_event.h"
|
#include "esp_event.h"
|
||||||
|
#include <cJSON.h>
|
||||||
|
|
||||||
#define NO_DATA_TIMEOUT_SEC 5
|
#define NO_DATA_TIMEOUT_SEC 5
|
||||||
|
|
||||||
@ -74,6 +75,19 @@ static void websocket_event_handler(void *handler_args, esp_event_base_t base, i
|
|||||||
} else {
|
} else {
|
||||||
ESP_LOGW(TAG, "Received=%.*s", data->data_len, (char *)data->data_ptr);
|
ESP_LOGW(TAG, "Received=%.*s", data->data_len, (char *)data->data_ptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If received data contains json structure it succeed to parse
|
||||||
|
cJSON *root = cJSON_Parse(data->data_ptr);
|
||||||
|
if (root) {
|
||||||
|
for (int i = 0 ; i < cJSON_GetArraySize(root) ; i++) {
|
||||||
|
cJSON *elem = cJSON_GetArrayItem(root, i);
|
||||||
|
cJSON *id = cJSON_GetObjectItem(elem, "id");
|
||||||
|
cJSON *name = cJSON_GetObjectItem(elem, "name");
|
||||||
|
ESP_LOGW(TAG, "Json={'id': '%s', 'name': '%s'}", id->valuestring, name->valuestring);
|
||||||
|
}
|
||||||
|
cJSON_Delete(root);
|
||||||
|
}
|
||||||
|
|
||||||
ESP_LOGW(TAG, "Total payload length=%d, data_len=%d, current payload offset=%d\r\n", data->payload_len, data->data_len, data->payload_offset);
|
ESP_LOGW(TAG, "Total payload length=%d, data_len=%d, current payload offset=%d\r\n", data->payload_len, data->data_len, data->payload_offset);
|
||||||
|
|
||||||
xTimerReset(shutdown_signal_timer, portMAX_DELAY);
|
xTimerReset(shutdown_signal_timer, portMAX_DELAY);
|
||||||
|
@ -6,6 +6,8 @@ import string
|
|||||||
from threading import Event, Thread
|
from threading import Event, Thread
|
||||||
import pytest
|
import pytest
|
||||||
import sys
|
import sys
|
||||||
|
import json
|
||||||
|
import time
|
||||||
|
|
||||||
from SimpleWebSocketServer import SimpleWebSocketServer, WebSocket
|
from SimpleWebSocketServer import SimpleWebSocketServer, WebSocket
|
||||||
from pytest_embedded import Dut
|
from pytest_embedded import Dut
|
||||||
@ -81,8 +83,33 @@ def test_examples_protocol_websocket(dut):
|
|||||||
def test_close(dut):
|
def test_close(dut):
|
||||||
code = dut.expect(re.compile(b'WEBSOCKET: Received closed message with code=(\\d*)'))[0]
|
code = dut.expect(re.compile(b'WEBSOCKET: Received closed message with code=(\\d*)'))[0]
|
||||||
print('Received close frame with code {}'.format(code))
|
print('Received close frame with code {}'.format(code))
|
||||||
|
|
||||||
|
def test_json(dut, websocket):
|
||||||
|
json_string = """
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"id":"1",
|
||||||
|
"name":"user1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id":"2",
|
||||||
|
"name":"user2"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
"""
|
||||||
|
websocket.send_data(json_string)
|
||||||
|
data = json.loads(json_string)
|
||||||
|
|
||||||
|
match = dut.expect(re.compile(b'Json=([a-zA-Z0-9]*).*')).group(0).decode()[5:]
|
||||||
|
if match == str(data[0]):
|
||||||
|
print('Sent message and received message are equal')
|
||||||
|
else:
|
||||||
|
raise ValueError('DUT received string do not match sent string, \nexpected: {}\nwith length {}\
|
||||||
|
\nreceived: {}\nwith length {}'.format(data[0], len(data[0]), match, len(match)))
|
||||||
|
|
||||||
|
|
||||||
def test_recv_long_msg(dut, websocket, msg_len, repeats):
|
def test_recv_long_msg(dut, websocket, msg_len, repeats):
|
||||||
|
|
||||||
send_msg = ''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for _ in range(msg_len))
|
send_msg = ''.join(random.choice(string.ascii_uppercase + string.ascii_lowercase + string.digits) for _ in range(msg_len))
|
||||||
|
|
||||||
for _ in range(repeats):
|
for _ in range(repeats):
|
||||||
@ -121,6 +148,7 @@ def test_examples_protocol_websocket(dut):
|
|||||||
test_echo(dut)
|
test_echo(dut)
|
||||||
# Message length should exceed DUT's buffer size to test fragmentation, default is 1024 byte
|
# Message length should exceed DUT's buffer size to test fragmentation, default is 1024 byte
|
||||||
test_recv_long_msg(dut, ws, 2000, 3)
|
test_recv_long_msg(dut, ws, 2000, 3)
|
||||||
|
test_json(dut, ws)
|
||||||
test_close(dut)
|
test_close(dut)
|
||||||
else:
|
else:
|
||||||
print('DUT connecting to {}'.format(uri))
|
print('DUT connecting to {}'.format(uri))
|
||||||
|
Reference in New Issue
Block a user