public override async Task ReceiveAsync(WebSocket socket, WebSocketReceiveResult result, byte[] buffer) { var socketId = WebSocketConnectionManager.GetId(socket); var message = await ParseBuffer <object>(result, buffer); switch (message.MessageType) { case MessageType.Invocation: var jsonStr = JsonConvert.SerializeObject(message.Payload); var invocationObject = JsonConvert.DeserializeObject <Invocation>(jsonStr); var invocation = _wsClients.Where(v => v.Id == socketId).FirstOrDefault() .Invocations.Where(v => v.Id == invocationObject.Id).FirstOrDefault(); invocation.IsInvoked = invocationObject.IsInvoked; lock (invocation) { Monitor.Pulse(invocation); } break; } }
public override async Task OnConnected(WebSocket socket) { await base.OnConnected(socket); var socketId = WebSocketConnectionManager.GetId(socket); _wsClients.Add(new WsClient { Id = socketId }); await SendMessageAsync(socketId, new Message <object> { MessageType = MessageType.ConnectionEvent, Payload = new { Id = socketId, Connected = true } }); }