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());
 }
Beispiel #2
0
        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();
        }