private void OnWebsocketMessageReceived(string message)
        {
            try
            {
                // Deserialize message base class to determine message type.
                MessageBase request = JsonConvert.DeserializeObject <MessageBase>(message);
                if (request == null)
                {
                    LogMessage("OnWebsocketMessageReceived: Unable to deserialize base message");
                    return;
                }

                LogMessage("OnWebsocketMessageReceived: Message type: " + request.MessageType);

                switch (request.MessageType)
                {
                case MessageType.AddSubscriberRequest:
                    AddSubscriberRequestMessage addSubscriberRequestMessage = JsonConvert.DeserializeObject <AddSubscriberRequestMessage>(message);
                    LogMessage("Subscriber name: " + addSubscriberRequestMessage.Name);

                    AddSubscriberResponseMessage response = new AddSubscriberResponseMessage
                    {
                        SubscriberId   = addSubscriberRequestMessage.SubscriberId,
                        SubscriptionId = Guid.NewGuid(),
                        Success        = true
                    };

                    // Send AddSubscriberResponse back to sender
                    string jsonText = JsonConvert.SerializeObject(response);
                    byte[] msg      = Encoding.UTF8.GetBytes(jsonText);
                    webSocket.SendAsync(new ArraySegment <byte>(msg), WebSocketMessageType.Text, true, CancellationToken.None).Wait(5000);
                    break;

                default:
                    LogMessage("Unknown message type");
                    break;
                }
            }
            catch (Exception ex)
            {
                LogMessage("OnWebsocketMessageReceived exception: " + ex.Message);
            }
        }
        private void ButtonAddSubscriber_Click(object sender, RoutedEventArgs e)
        {
            if (websocket.State != WebSocketState.Open)
            {
                return;
            }

            AddSubscriberRequestMessage request = new AddSubscriberRequestMessage
            {
                SubscriberId = 100,
                Name         = "John Doe",
                Topic        = "Weather reports"
            };

            string jsonText = JsonConvert.SerializeObject(request);

            byte[] msg = Encoding.UTF8.GetBytes(jsonText);
            websocket.SendAsync(new ArraySegment <byte>(msg), WebSocketMessageType.Text, true, CancellationToken.None).Wait(5000);
        }