/// <summary> /// Initializes a new instance of the <see cref="EventComponent" /> class. /// </summary> /// <param name="robot">The robot.</param> internal EventComponent(Robot robot) : base(robot) { this.eventFeed = new AsyncEventLoop <EventResponse>( (token) => robot.StartStream(client => client.EventStream(new EventRequest(), cancellationToken: token)), ProcessEvent, () => { OnPropertyChanged(nameof(IsProccessingEvents)); Robot.Disconnect().ConfigureAwait(false); }, robot.PropagateException ); }
/// <summary> /// Initializes a new instance of the <see cref="AudioComponent" /> class. /// </summary> /// <param name="robot">The robot.</param> internal AudioComponent(Robot robot) : base(robot) { this.audioFeed = new AsyncEventLoop <AudioFeedResponse>( (token) => robot.StartStream(client => client.AudioFeed(new AudioFeedRequest(), cancellationToken: token)), (response) => AudioReceived?.Invoke(this, new AudioReceivedEventArgs(response)), () => OnPropertyChanged(nameof(IsAudioFeedActive)), robot.PropagateException ); this.playbackFeed = new AsyncDuplexEventLoop <ExternalAudioStreamRequest, ExternalAudioStreamResponse>( (token) => Robot.StartStream(client => client.ExternalAudioStreamPlayback(cancellationToken: token)), ProcessAudioResponse, () => { OnPropertyChanged(nameof(IsPlaybackActive)); playbackResult?.SetResult(PlaybackResult.Completed); }, Robot.PropagateException ); }
/// <summary> /// Initializes a new instance of the <see cref="NavMapComponent" /> class. /// </summary> /// <param name="robot">The robot.</param> internal NavMapComponent(Robot robot) : base(robot) { this.navMapFeed = new AsyncEventLoop <NavMapFeedResponse>( (token) => robot.StartStream(client => client.NavMapFeed(new NavMapFeedRequest() { Frequency = Frequency }, cancellationToken: token)), (response) => { var navMapUpdateEventArgs = new NavMapUpdateEventArgs(response); LatestNavMap = navMapUpdateEventArgs.NavMap; NavMapUpdate?.Invoke(this, navMapUpdateEventArgs); }, () => OnPropertyChanged(nameof(IsFeedActive)), robot.PropagateException ); }