我正在使用WebsocketSharp库访问ESP32上的Websocket服务器。 当websocket客户端向服务器发送消息时,将调用服务器中的此方法,例如以获取设备信息数据:
void onWsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len){
if(type == WS_EVT_DATA){
Log.notice("Websocket data received" CR);
if(jsonDecoder.GetMessageType(stringData) == "RequestGetDeviceInfo"){
auto msg = jsonDecoder.CreateDeviceInfoMessage(
//Create json with the data, and "MessageType" is "DeviceInfo"
);
//here the request gets an answer
socket.text(client ->id(),msg);
}
}
}
在客户端上,存在一种模式,要么发送某些内容,要么使用接收到的数据触发一个事件。因此,当使用MessageType“ RequestDeviceInfo”发送json消息时,将触发该事件:
using (var ws = new WebSocket("ws://192.168.178.34/ws"))
{
var msg = JsonConvert.SerializeObject(new Message()
{
MessageType = "RequestDeviceInfo",
});
ws.OnMessage += (sender, e) =>
{
//e.Data contains the json with MessageType "DeviceInfo"
string jsonAnswer = e.Data;
};
}
因此,如果发送了请求,则事件将使用json响应触发100%。 我的问题是:如何将其打包成“ get”方法(最好是超时)?喜欢:
async DeviceInfo GetDeviceInfo()
{
//Send the request and wait for the event and return the e.Data
}
谢谢。