示例#1
0
        public override async Task StartStream(
            Grpc.Core.IAsyncStreamReader <Plugin.ConnInfo> requestStream,
            Grpc.Core.IServerStreamWriter <Plugin.ConnInfo> responseStream,
            Grpc.Core.ServerCallContext context)
        {
            var cts = CancellationTokenSource.CreateLinkedTokenSource(
                _pluginHost.StopHostingToken, context.CancellationToken);

            _log.LogInformation("Starting streaming...");
            var ct = cts.Token;

            try
            {
                while (!ct.IsCancellationRequested)
                {
                    while (await requestStream.MoveNext(ct))
                    {
                        var connInfo = requestStream.Current;
                        _log.LogWarning("Not sure what to do -- got connection info:  {@conninfo}", connInfo);
                        await responseStream.WriteAsync(connInfo);
                    }
                }
            }
            catch (OperationCanceledException)
            {
                _log.LogWarning("Operation has been canceled");
            }

            _log.LogInformation("Streaming completed");
        }
示例#2
0
 public async Task DirectorMessageLoop(Grpc.Core.IServerStreamWriter <NewLineCrossingEvent> responseStream)
 {
     while (!TerminateFlagged)
     {
         await responseStream.WriteAsync(await directorMailbox.ReceiveAsync());
     }
 }
示例#3
0
 public async Task AnalyzerMessageLoop(Grpc.Core.IServerStreamWriter <NewImageRequest> responseStream)
 {
     while (!TerminateFlagged)
     {
         await responseStream.WriteAsync(await analyzerMailbox.ReceiveAsync());
     }
 }
        public override async Task DirectorRegistration(RegisterToRecieveAnalyzerMessages msg,
                                                        Grpc.Core.IServerStreamWriter <NewLineCrossingEvent> responseStream,
                                                        Grpc.Core.ServerCallContext context)
        {
            await MailBag.Get().DirectorMessageLoop(responseStream);

            await Task.Delay(-1);
        }
示例#5
0
        /// <summary>
        /// Gets all features contained within the given bounding rectangle.
        /// </summary>
        public async Task ListFeatures(Rectangle request, Grpc.Core.IServerStreamWriter <Feature> responseStream, Grpc.Core.ServerCallContext context)
        {
            var responses = features.FindAll((feature) => feature.Exists() && request.Contains(feature.Location));

            foreach (var response in responses)
            {
                await responseStream.WriteAsync(response);
            }
        }
示例#6
0
 /// <summary>
 /// Receives a stream of message/location pairs, and responds with a stream of all previous
 /// messages at each of those locations.
 /// </summary>
 public async Task RouteChat(Grpc.Core.IAsyncStreamReader <RouteNote> requestStream, Grpc.Core.IServerStreamWriter <RouteNote> responseStream, Grpc.Core.ServerCallContext context)
 {
     while (await requestStream.MoveNext())
     {
         var note = requestStream.Current;
         List <RouteNote> prevNotes = AddNoteForLocation(note.Location, note);
         foreach (var prevNote in prevNotes)
         {
             await responseStream.WriteAsync(prevNote);
         }
     }
 }
示例#7
0
        public override async Task StarWarsIntro(Google.Protobuf.WellKnownTypes.Empty request, Grpc.Core.IServerStreamWriter <ScenesResponse> responseStream, Grpc.Core.ServerCallContext context)
        {
            _logger.LogInformation("Start Streaming...");

            await responseStream.WriteAsync(new ScenesResponse()
            {
                Frame = Scenes.INTRO
            });

            _logger.LogInformation("Sending a Frame...");
            await Task.Delay(TimeSpan.FromSeconds(2));

            await responseStream.WriteAsync(new ScenesResponse()
            {
                Frame = Scenes.LOGO
            });

            _logger.LogInformation("Sending a Frame...");
            await Task.Delay(TimeSpan.FromSeconds(1));

            foreach (var frame in Scenes.FlyingLetters())
            {
                await responseStream.WriteAsync(new ScenesResponse()
                {
                    Frame = frame
                });

                _logger.LogInformation("Sending a Frame...");
                await Task.Delay(600);
            }
        }
示例#8
0
        /// <summary>
        /// Receives a stream of message/location pairs, and responds with a stream of all previous
        /// messages at each of those locations.
        /// </summary>
        public async Task RouteChat(Grpc.Core.ServerCallContext context, Grpc.Core.IAsyncStreamReader <RouteNote> requestStream, Grpc.Core.IServerStreamWriter <RouteNote> responseStream)
        {
            while (await requestStream.MoveNext())
            {
                var note = requestStream.Current;
                List <RouteNote> notes = GetOrCreateNotes(note.Location);

                List <RouteNote> prevNotes;
                lock (notes)
                {
                    prevNotes = new List <RouteNote>(notes);
                }

                foreach (var prevNote in prevNotes)
                {
                    await responseStream.WriteAsync(prevNote);
                }

                lock (notes)
                {
                    notes.Add(note);
                }
            }
        }
示例#9
0
        /// <summary>
        /// Gets all features contained within the given bounding rectangle.
        /// </summary>
        public async Task ListFeatures(Grpc.Core.ServerCallContext context, Rectangle request, Grpc.Core.IServerStreamWriter <Feature> responseStream)
        {
            int left   = Math.Min(request.Lo.Longitude, request.Hi.Longitude);
            int right  = Math.Max(request.Lo.Longitude, request.Hi.Longitude);
            int top    = Math.Max(request.Lo.Latitude, request.Hi.Latitude);
            int bottom = Math.Min(request.Lo.Latitude, request.Hi.Latitude);

            foreach (var feature in features)
            {
                if (!RouteGuideUtil.Exists(feature))
                {
                    continue;
                }

                int lat = feature.Location.Latitude;
                int lon = feature.Location.Longitude;
                if (lon >= left && lon <= right && lat >= bottom && lat <= top)
                {
                    await responseStream.WriteAsync(feature);
                }
            }
        }
        public override async Task FindMax(Grpc.Core.IAsyncStreamReader <FindMax.FindMaxRequest> requestStream, Grpc.Core.IServerStreamWriter <FindMax.FindMaxResponse> responseStream, Grpc.Core.ServerCallContext context)
        {
            try
            {
                var max = 0;
                Console.WriteLine($"Received:");
                while (await requestStream.MoveNext())
                {
                    Console.WriteLine($"{requestStream.Current.Number}");

                    if (max < requestStream.Current.Number)
                    {
                        max = requestStream.Current.Number;
                    }
                }

                Console.WriteLine($"Max found: {max}");
                await responseStream.WriteAsync(new FindMaxResponse()
                {
                    Max = max
                });
            }
            catch (System.Exception e)
            {
                throw new RpcException(new Status(StatusCode.Internal, $"Something went wrong - Exception: {e}"));
            }
        }