public async Task VolumeMuteMessageAsync(bool muted)
 {
     if (connection.ConnectionState == DeviceConnectionState.Connected)
     {
         await SendMessageAsync(ChromeCastMessages.GetVolumeMuteMessage(muted, GetNextRequestId()));
     }
 }
        public async Task ConnectAsync(string sourceId = null, string destinationId = null, Action connectedCallback = null)
        {
            await SendMessageAsync(ChromeCastMessages.GetConnectMessage(sourceId, destinationId));

            var listener = new StreamingRequestsListener();

            listener.Connected += async(Socket socket, string http) =>
            {
                var remoteAddress = ((IPEndPoint)socket.RemoteEndPoint).Address.ToString();
                if (remoteAddress != connection.Host)
                {
                    Debug.WriteLine("Address didn't match");
                }
                else
                {
                    await ConnectRecordingDataAsync(socket);
                }

                if (connectedCallback != null)
                {
                    connectedCallback();
                }
            };

            var endpoint = listener.StartListening(Network.GetIp4Address());

            if (endpoint == null)
            {
                throw new Exception("Can't listen ...");
            }

            streamingUrl = string.Format("http://{0}:{1}/", endpoint.Address.ToString(), endpoint.Port);
        }
Ejemplo n.º 3
0
        public void Write(CastMessage message, DeviceState state)
        {
            if (Disposed)
            {
                return;
            }

            logger.Log($"out [{DateTime.Now.ToLongTimeString()}] [{state}] [{ipAddress}:{port}] {message.PayloadUtf8}");
            var byteArray = ChromeCastMessages.MessageToByteArray(message);

            sslStream.BeginWrite(byteArray, 0, byteArray.Length, WriteAsyncCallback, sslStream);
        }
        public void ProcessMessage(DeviceListener deviceListener, CastMessage castMessage)
        {
            var options = new JsonSerializerOptions {
                IncludeFields = true
            };
            var message = JsonSerializer.Deserialize <PayloadMessageBase>(castMessage.PayloadUtf8, options);

            switch (message.type)
            {
            case "SET_VOLUME":
                if (castMessage.PayloadUtf8.Contains("muted", System.StringComparison.CurrentCulture))
                {
                    var volumeMuteMessage = JsonSerializer.Deserialize <MessageVolumeMute>(castMessage.PayloadUtf8, options);
                    SystemCalls.SetMute(volumeMuteMessage.volume.muted);
                    deviceListener.Write(ChromeCastMessages.MediaStatusMessage(volumeMuteMessage.requestId, state, SecondsPlaying()), state);
                    deviceListener.Write(ChromeCastMessages.ReceiverStatusMessage(volumeMuteMessage.requestId), state);
                }
                else
                {
                    var volumeMessage = JsonSerializer.Deserialize <MessageVolume>(castMessage.PayloadUtf8, options);
                    SystemCalls.SetVolume(volumeMessage.volume.level);
                    deviceListener.Write(ChromeCastMessages.MediaStatusMessage(volumeMessage.requestId, state, SecondsPlaying()), state);
                    deviceListener.Write(ChromeCastMessages.ReceiverStatusMessage(volumeMessage.requestId), state);
                }
                break;

            case "CONNECT":
                state = DeviceState.Connected;
                break;

            case "CLOSE":
                state = DeviceState.Closed;
                var closeMessage = JsonSerializer.Deserialize <MessageStop>(castMessage.PayloadUtf8, options);
                deviceListener.Write(ChromeCastMessages.MediaStatusMessage(closeMessage.requestId, state, 0), state);
                break;

            case "LAUNCH":
                state = DeviceState.Launching;
                var launchMessage = JsonSerializer.Deserialize <MessageLaunch>(castMessage.PayloadUtf8, options);

                deviceListener.Write(ChromeCastMessages.ReceiverStatusMessage(launchMessage.requestId), state);
                break;

            case "LOAD":
                state = DeviceState.Loading;
                var loadMessage = JsonSerializer.Deserialize <MessageLoad>(castMessage.PayloadUtf8, options);

                logger.Log($"[{state}] Start playing: {loadMessage?.media?.contentId}");
                SystemCalls.StartPlaying(loadMessage.media.contentId);
                playerPlayTime = DateTime.Now;
                deviceListener.Write(ChromeCastMessages.MediaStatusMessage(loadMessage.requestId, state, SecondsPlaying()), state);
                state = DeviceState.Buffering;
                Task.Delay(2000).Wait();
                deviceListener.Write(ChromeCastMessages.MediaStatusMessage(loadMessage.requestId, state, SecondsPlaying()), state);
                break;

            case "PAUSE":
                state = DeviceState.Paused;
                var pauseMessage = JsonSerializer.Deserialize <MessagePause>(castMessage.PayloadUtf8, options);
                deviceListener.Write(ChromeCastMessages.MediaStatusMessage(pauseMessage.requestId, state, SecondsPlaying()), state);
                break;

            case "PLAY":
                break;

            case "STOP":
                state = DeviceState.Idle;
                var stopMessage = JsonSerializer.Deserialize <MessageStop>(castMessage.PayloadUtf8, options);
                deviceListener.Write(ChromeCastMessages.MediaStatusMessage(stopMessage.requestId, state, 0), state);
                SystemCalls.StopPlaying();
                break;

            case "PING":
                break;

            case "PONG":
                break;

            case "GET_STATUS":
                var getstatusMessage = JsonSerializer.Deserialize <MessageStatus>(castMessage.PayloadUtf8, options);

                if (state == DeviceState.Buffering)
                {
                    state = DeviceState.Playing;
                }

                switch (state)
                {
                case DeviceState.Idle:
                case DeviceState.Closed:
                case DeviceState.Connected:
                    deviceListener.Write(ChromeCastMessages.ReceiverStatusMessage(getstatusMessage.requestId), state);
                    break;

                case DeviceState.Playing:
                    deviceListener.Write(ChromeCastMessages.MediaStatusMessage(getstatusMessage.requestId, state, SecondsPlaying()), state);
                    break;

                default:
                    deviceListener.Write(ChromeCastMessages.ReceiverStatusMessage(getstatusMessage.requestId), state);
                    break;
                }

                break;

            default:
                logger.Log($"in default [{DateTime.Now.ToLongTimeString()}] {message.type} {castMessage.PayloadUtf8}");
                break;
            }
        }
 public void SendNewVolume(float level, DeviceListener deviceListener)
 {
     deviceListener.Write(ChromeCastMessages.MediaStatusMessage(0, state, SecondsPlaying()), state);
 }
 public async Task SendMessageAsync(CastMessage castMessage)
 {
     var byteMessage = ChromeCastMessages.MessageToByteArray(castMessage);
     await connection.SendMessageAsync(new ArraySegment <byte>(byteMessage));
 }
 public async Task StopAsync()
 {
     await SendMessageAsync(ChromeCastMessages.GetStopMessage(chromeCastApplicationSessionNr, chromeCastMediaSessionId, GetNextRequestId(), chromeCastSource, chromeCastDestination));
 }
 public async Task GetMediaStatusAsync()
 {
     await SendMessageAsync(ChromeCastMessages.GetMediaStatusMessage(GetNextRequestId(), chromeCastSource, chromeCastDestination));
 }
 public async Task GetReceiverStatusAsync()
 {
     await SendMessageAsync(ChromeCastMessages.GetReceiverStatusMessage(GetNextRequestId()));
 }
 public async Task PongAsync()
 {
     await SendMessageAsync(ChromeCastMessages.GetPongMessage());
 }
 public async Task SetVolumeMessageAsync(Volume newVolume)
 {
     await SendMessageAsync(ChromeCastMessages.GetVolumeSetMessage(newVolume, GetNextRequestId()));
 }
 public async Task PauseMediaMessageAsync()
 {
     DeviceState = DeviceState.Paused;
     await SendMessageAsync(ChromeCastMessages.GetPauseMessage(chromeCastApplicationSessionNr, chromeCastMediaSessionId, GetNextRequestId(), chromeCastSource, chromeCastDestination));
 }
 public async Task LoadMediaMessageAsync()
 {
     DeviceState = DeviceState.LoadingMedia;
     await SendMessageAsync(ChromeCastMessages.GetLoadMessage(streamingUrl, chromeCastSource, chromeCastDestination));
 }
 public async Task LaunchMessageAsyncM()
 {
     await SendMessageAsync(ChromeCastMessages.GetLaunchMessage(GetNextRequestId()));
 }