public WebSocketMessageContract Deserialize(string json) { var message = JsonConvert.DeserializeObject <WebSocketMessageContractType>(json); if (message == null) { throw new ArgumentException("Invalid message"); } var deserializedMessage = new WebSocketMessageContract() { Type = message.Type }; switch (message.Type) { case WebSocketMessageRequestTypes.CONFIG: var tempConfigMessage = JsonConvert.DeserializeObject <WebSocketMessageContract <ConfigMessage> >(json); deserializedMessage.Data = tempConfigMessage.Data; break; case WebSocketMessageRequestTypes.MESSAGE: var tempClientInternalMessage = JsonConvert.DeserializeObject <WebSocketMessageContract <ClientInternalMessage> >(json); deserializedMessage.Data = tempClientInternalMessage.Data; break; case WebSocketMessageRequestTypes.SYNCHRONIZATION: var tempClientSynchronization = JsonConvert.DeserializeObject <WebSocketMessageContract <ClientSynchronizationMessage> >(json); deserializedMessage.Data = tempClientSynchronization.Data; break; default: throw new ArgumentException(nameof(message.Type)); } return(deserializedMessage); }
public async Task ReceiveAsync(IWebSocketConnection webSocketConnection, WebSocketMessageContract message) { var connectionId = webSocketConnection.ConnectionId; if (message == null) { throw new ArgumentNullException("Message cannot be null"); } _logger.LogInformation("Receive message {0}", message.Type); switch (message.Type) { case WebSocketMessageRequestTypes.CONFIG: ReceiveConfigMessage((ConfigMessage)message.Data, connectionId); break; case WebSocketMessageRequestTypes.MESSAGE: var clientInternalMessage = (ClientInternalMessage)message.Data; try { await ReceiveInternalMessageAsync(webSocketConnection, clientInternalMessage); } catch (Exception ex) { await _internalMessageSender.SendAsync( new WebSocketConnection(webSocketConnection.WebSocket, connectionId), new WebSocketMessageContract() { Type = WebSocketMessageResponseTypes.INTERNAL_MESSAGE_ERROR, Data = new InternalMessageError() { CorrelationId = clientInternalMessage.CorrelationId.Value, Description = "Error occured: " + ex.Message } }); } break; case WebSocketMessageRequestTypes.SYNCHRONIZATION: var clientSynchronizationMessage = (ClientSynchronizationMessage)message.Data; await ReceiveSynchronizationMessage(webSocketConnection, clientSynchronizationMessage); break; default: throw new ArgumentException(nameof(message.Type)); } }
public async Task SendAsync(IWebSocketConnection webSocketConnection, WebSocketMessageContract webSocketMessage) { _logger.LogInformation("Sending message of type {0} on connection {1}", webSocketMessage.Type, webSocketConnection.ConnectionId); var text = JsonConvert.SerializeObject(webSocketMessage); if (webSocketConnection.WebSocket.State != WebSocketState.Open) { return; } var textToByteArray = Encoding.UTF8.GetBytes(text); var buffer = new ArraySegment <byte>( array: textToByteArray, offset: 0, count: textToByteArray.Length ); await webSocketConnection.WebSocket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None); }