private async Task RunSampleAsync(ModuleClient moduleClient, bool acceptDeviceStreamingRequest, CancellationTokenSource cancellationTokenSource) { Console.WriteLine("Creating DeviceStreamRequest"); DeviceStreamRequest streamRequest = await moduleClient.WaitForDeviceStreamRequestAsync(cancellationTokenSource.Token).ConfigureAwait(false); if (streamRequest != null) { if (acceptDeviceStreamingRequest) { await moduleClient.AcceptDeviceStreamRequestAsync(streamRequest, cancellationTokenSource.Token).ConfigureAwait(false); using (ClientWebSocket webSocket = await DeviceStreamingCommon.GetStreamingClientAsync(streamRequest.Uri, streamRequest.AuthorizationToken, cancellationTokenSource.Token).ConfigureAwait(false)) { using (TcpClient tcpClient = new TcpClient()) { await tcpClient.ConnectAsync(_hostName, _port).ConfigureAwait(false); using (NetworkStream localStream = tcpClient.GetStream()) { Console.WriteLine("Starting streaming"); await Task.WhenAny( HandleIncomingDataAsync(localStream, webSocket, cancellationTokenSource.Token), HandleOutgoingDataAsync(localStream, webSocket, cancellationTokenSource.Token) ).ConfigureAwait(false); localStream.Close(); } } if (webSocket.State == WebSocketState.Open) { await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, string.Empty, cancellationTokenSource.Token).ConfigureAwait(false); } Console.WriteLine($"{DateTime.UtcNow} - Streaming stopped"); } } else { await moduleClient.RejectDeviceStreamRequestAsync(streamRequest, cancellationTokenSource.Token).ConfigureAwait(false); } } }
public async Task RunSampleAsync(bool acceptDeviceStreamingRequest) { byte[] buffer = new byte[1024]; using (var cancellationTokenSource = new CancellationTokenSource(TimeSpan.FromMinutes(5))) { DeviceStreamRequest streamRequest = null; if (this._deviceClient != null) { streamRequest = await _deviceClient.WaitForDeviceStreamRequestAsync(cancellationTokenSource.Token).ConfigureAwait(false); } else if (this._moduleClient != null) { streamRequest = await _moduleClient.WaitForDeviceStreamRequestAsync(cancellationTokenSource.Token).ConfigureAwait(false); } if (streamRequest != null) { if (acceptDeviceStreamingRequest) { if (this._deviceClient != null) { await _deviceClient.AcceptDeviceStreamRequestAsync(streamRequest, cancellationTokenSource.Token).ConfigureAwait(false); } else if (this._moduleClient != null) { await _moduleClient.AcceptDeviceStreamRequestAsync(streamRequest, cancellationTokenSource.Token).ConfigureAwait(false); } using (ClientWebSocket webSocket = await DeviceStreamingCommon.GetStreamingClientAsync(streamRequest.Url, streamRequest.AuthorizationToken, cancellationTokenSource.Token).ConfigureAwait(false)) { WebSocketReceiveResult receiveResult = await webSocket.ReceiveAsync(new ArraySegment <byte>(buffer, 0, buffer.Length), cancellationTokenSource.Token).ConfigureAwait(false); Console.WriteLine("Received stream data: {0}", Encoding.UTF8.GetString(buffer, 0, receiveResult.Count)); await webSocket.SendAsync(new ArraySegment <byte>(buffer, 0, receiveResult.Count), WebSocketMessageType.Binary, true, cancellationTokenSource.Token).ConfigureAwait(false); Console.WriteLine("Sent stream data: {0}", Encoding.UTF8.GetString(buffer, 0, receiveResult.Count)); await webSocket.CloseAsync(WebSocketCloseStatus.NormalClosure, String.Empty, cancellationTokenSource.Token).ConfigureAwait(false); } } else { if (this._deviceClient != null) { await _deviceClient.RejectDeviceStreamRequestAsync(streamRequest, cancellationTokenSource.Token).ConfigureAwait(false); } else if (this._moduleClient != null) { await _moduleClient.RejectDeviceStreamRequestAsync(streamRequest, cancellationTokenSource.Token).ConfigureAwait(false); } } } if (this._deviceClient != null) { await _deviceClient.CloseAsync().ConfigureAwait(false); } else if (this._moduleClient != null) { await _moduleClient.CloseAsync().ConfigureAwait(false); } } }