Beispiel #1
0
        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);
        }
Beispiel #2
0
        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);
        }