Smarter message parsing
Future: make return params dynamic, not string now requires type in message objects
This commit is contained in:
@ -19,17 +19,23 @@ public class RootCommandService : CommandRouter, ITaskWaitSource {
|
||||
}
|
||||
|
||||
private void OnMessage(string message) {
|
||||
if (JsonConvert.DeserializeObject<ReplyMessage>(message) is not ReplyMessage msg) return;
|
||||
IChunkWaiter? waiter;
|
||||
lock (_syncRoot) if (!_waits.TryGetValue(msg.AnswerId, out waiter)) {
|
||||
Program.LogWarningAsync("Socket", $"Invalid wait id '{msg.AnswerId}'!");
|
||||
return;
|
||||
}
|
||||
waiter.SetResultState(msg.State);
|
||||
waiter.AddChunk(msg.Chunk, msg.Total, msg.Result);
|
||||
if (waiter.Finished || waiter.IsCancellationRequested)
|
||||
lock (_syncRoot)
|
||||
_waits.Remove(waiter.ID);
|
||||
switch (Message.Deserialize(message)) {
|
||||
case ReplyMessage msg:
|
||||
IChunkWaiter? waiter;
|
||||
lock (_syncRoot) if (!_waits.TryGetValue(msg.AnswerId, out waiter)) {
|
||||
Program.LogWarningAsync("Socket", $"Invalid wait id '{msg.AnswerId}'!");
|
||||
return;
|
||||
}
|
||||
waiter.SetResultState(msg.State);
|
||||
waiter.AddChunk(msg.Chunk, msg.Total, msg.Result);
|
||||
if (waiter.Finished || waiter.IsCancellationRequested)
|
||||
lock (_syncRoot)
|
||||
_waits.Remove(waiter.ID);
|
||||
break;
|
||||
default:
|
||||
Program.LogInfo(Program.WebSocketSource, $"Received unhandled message: {message}!");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
public Task Send(string message) => _socket.Send(message);
|
||||
|
Reference in New Issue
Block a user