/// <summary> /// Gets all features contained within the given bounding rectangle. /// </summary> public override async Task ListFeatures(RouteGuide.Rectangle request, IServerStreamWriter <RouteGuide.Feature> responseStream, ServerCallContext context) { var responses = features.FindAll((feature) => feature.Exists() && request.Contains(feature.Location)); foreach (var response in responses) { await responseStream.WriteAsync(response); } }
/// <summary> /// Server-streaming example. Calls listFeatures with a rectangle of interest. Prints each response feature as it arrives. /// </summary> public async Task ListFeatures(int lowLat, int lowLon, int hiLat, int hiLon) { try { Log("*** ListFeatures: lowLat={0} lowLon={1} hiLat={2} hiLon={3}", lowLat, lowLon, hiLat, hiLon); RouteGuide.Rectangle request = new RouteGuide.Rectangle { Lo = new RouteGuide.Point { Latitude = lowLat, Longitude = lowLon }, Hi = new RouteGuide.Point { Latitude = hiLat, Longitude = hiLon } }; using (var call = client.ListFeatures(request)) { var responseStream = call.ResponseStream; StringBuilder responseLog = new StringBuilder("Result: "); while (await responseStream.MoveNext()) { RouteGuide.Feature feature = responseStream.Current; responseLog.Append(feature.ToString()); } Log(responseLog.ToString()); } } catch (RpcException e) { Log("RPC failed " + e); throw; } }