private void Connection_StateChanged(EndpointConnection con, Communication.DeviceConnectionState newState)
 {
     if (newState == DeviceConnectionState.Error)
     {
         DeviceState = DeviceState.ConnectError;
     }
 }
        public EndpointCommunication(EndpointConnection connection)
        {
            this.connection       = connection ?? throw new ArgumentNullException(nameof(connection));
            chromeCastDestination = string.Empty;
            chromeCastSource      = string.Format("client-8{0}", new Random().Next(10000, 99999));

            connection.StateChanged    += Connection_StateChanged;
            connection.MessageReceived += Connection_MessageReceived;
        }
        private async void Connection_MessageReceived(EndpointConnection con, CastMessage castMessage)
        {
            var message = JsonConvert.DeserializeObject <PayloadMessageBase>(castMessage.PayloadUtf8);

            switch (message.@type)
            {
            case "RECEIVER_STATUS":
                OnReceiveReceiverStatus(JsonConvert.DeserializeObject <MessageReceiverStatus>(castMessage.PayloadUtf8));
                break;

            case "MEDIA_STATUS":
                OnReceiveMediaStatus(JsonConvert.DeserializeObject <MessageMediaStatus>(castMessage.PayloadUtf8));
                break;

            case "PING":
                await PongAsync();

                break;

            case "PONG":
                var pongMessage = JsonConvert.DeserializeObject <PayloadMessageBase>(castMessage.PayloadUtf8);
                break;

            case "CLOSE":
                var closeMessage = JsonConvert.DeserializeObject <PayloadMessageBase>(castMessage.PayloadUtf8);
                DeviceState = DeviceState.Closed;
                //if (applicationLogic.GetAutoRestart())
                //{
                //    await Task.Delay(5000);
                //    OnClickDeviceButton(DeviceState.Closed);
                //}
                break;

            case "LOAD_FAILED":
                var loadFailedMessage = JsonConvert.DeserializeObject <MessageLoadFailed>(castMessage.PayloadUtf8);
                DeviceState = DeviceState.LoadFailed;
                break;

            case "LOAD_CANCELLED":
                var loadCancelledMessage = JsonConvert.DeserializeObject <MessageLoadCancelled>(castMessage.PayloadUtf8);
                DeviceState = DeviceState.LoadCancelled;
                break;

            case "INVALID_REQUEST":
                var invalidRequestMessage = JsonConvert.DeserializeObject <PayloadMessageBase>(castMessage.PayloadUtf8);
                DeviceState = DeviceState.InvalidRequest;
                break;

            default:
                break;
            }
        }