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"); }
public async Task DirectorMessageLoop(Grpc.Core.IServerStreamWriter <NewLineCrossingEvent> responseStream) { while (!TerminateFlagged) { await responseStream.WriteAsync(await directorMailbox.ReceiveAsync()); } }
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); }
/// <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); } }
/// <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); } } }
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); } }
/// <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); } } }
/// <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}")); } }