Я пишу программу (на самом деле это игра в Unity), которая должна действовать как клиент для сервера Websocket, который работает отдельно и работает.
Я использую System.Net.Websockets
ClientWebSocket
, Я открыл соединение, я могу отправлять сообщения, но в отличие от клиента Javascript, где я настраивал бы функцию обратного вызова, которая запускалась бы каждый раз, когда клиент веб-сокета получал сообщение. Мне трудно понять, для чего предназначен поток C# API.
Вот обработчик сообщения, который я написал:
public async Task HandleMessages() {
using (var ms = new MemoryStream()) {
var messageBuffer = WebSocket.CreateClientBuffer(8192, 8192);
WebSocketReceiveResult result;
do {
result = await ws.ReceiveAsync(messageBuffer, CancellationToken.None);
ms.Write(messageBuffer.Array, messageBuffer.Offset, result.Count);
}
while (!result.EndOfMessage);
if (result.MessageType == WebSocketMessageType.Text) {
var msgString = Encoding.UTF8.GetString(ms.ToArray());
Debug.Log(msgString);
var message = JsonConvert.DeserializeObject<Dictionary<String, String>>(msgString);
if (message["roomCode"] == RoomCode.ToLower()) {
// Message was intended for us!
Debug.Log("[WS] Got a message of type " + message["messageType"]);
}
}
}
}
Итак, после первоначального открытия соединения с Websocket, если я вызову это:
await Task.WhenAll(HandleMessages());
, тогда он будет обрабатывать первое входящее сообщение, но не последующие. Я пробовал много разных вещей, но не могу понять, как заставить эту задачу запускаться каждый раз, когда приходит сообщение.
Кто-нибудь знает что-нибудь по этому поводу?