public override Task GetPidgeyInteractionsStream( PidgeyInteractionsNofityRequest request, IServerStreamWriter <PidgeyInteraction> responseStream, ServerCallContext context) { return(Observable.Create <PidgeyInteraction>(observer => { return _window .Pidgey .Events() .MouseEnter .Subscribe(_ => { var mouseEntered = DateTime.UtcNow; _window.Pidgey .Events() .MouseLeave .Take(1) .Subscribe(__ => { var delta = DateTime.UtcNow - mouseEntered; if (delta.TotalSeconds < request.MinSeconds) { return; } var interaction = new PidgeyInteraction { SecondsHovered = delta.TotalSeconds }; observer.OnNext(interaction); }); }); }) .Do(async interaction => await responseStream.WriteAsync(interaction)) .ToTask()); }
static void Main(string[] args) { Console.WriteLine("Hello World! Hit enter to close the app at any time!"); var channel = new Channel("127.0.0.1", 50051, ChannelCredentials.Insecure); var client = new InteractionReporter.InteractionReporterClient(channel); var request = new PidgeyInteractionsNofityRequest() { MinSeconds = 1 }; var disposable = client .GetPidgeyInteractionsStream(request) .ResponseStream .ReadAllAsync() .ToObservable() .Subscribe(interaction => Console.WriteLine($"Pidgey spotted! You saw it for {interaction.SecondsHovered} seconds.")); Console.ReadLine(); }