/// <summary> /// /// </summary> /// <param name="requestStream"></param> /// <param name="context"></param> /// <returns></returns> public async override Task <PlayerSearchResponse> SearchPlayer_ClientStream(IAsyncStreamReader <PlayerSearchRequest> requestStream, ServerCallContext context) { string callCounter = GetCallCounter(context); IDictionary <string, Team> teams = SampleDataRepository.GetTeams(10); PlayerSearchResponse response = new PlayerSearchResponse(); int initial = 1; while (await requestStream.MoveNext().ConfigureAwait(false)) { ThrowExceptionIfRequestedCancel(context); PlayerSearchRequest request = requestStream.Current; s_Logger.Info(string.Format("[{0}] Requested {1} players.", callCounter, request.ExpectedDataCount)); foreach (Player player in SampleDataRepository.GeneratePlayers(initial, request.ExpectedDataCount, teams)) { ThrowExceptionIfRequestedCancel(context); response.Players.Add(player); if (!response.Teams.ContainsKey(player.TeamCode)) { response.Teams.Add(player.TeamCode, teams[player.TeamCode]); } } initial += request.ExpectedDataCount; } return(response); }
public override Task <TeamSearchResponse> SearchTeam(TeamSearchRequest request, ServerCallContext context) { string callCounter = GetCallCounter(context); s_Logger.Info(string.Format("[{0}] Requested {1} teams.", callCounter, request.ExpectedDataCount)); IDictionary <string, Team> teams = SampleDataRepository.GetTeams(request.ExpectedDataCount); TeamSearchResponse response = new TeamSearchResponse(); response.Teams.AddRange(teams.Values); return(Task.FromResult(response)); }
/// <summary> /// /// </summary> /// <param name="request"></param> /// <param name="responseStream"></param> /// <param name="context"></param> /// <returns></returns> public async override Task SearchPlayer_ServerStream(PlayerSearchRequest request, IServerStreamWriter <PlayerSearchResponse> responseStream, ServerCallContext context) { string callCounter = GetCallCounter(context); s_Logger.Info(string.Format("[{0}] Requested {1} players.", callCounter, request.ExpectedDataCount)); IDictionary <string, Team> teams = SampleDataRepository.GetTeams(10); PlayerSearchResponse response = new PlayerSearchResponse(); int fetchCount = 0; foreach (Player player in SampleDataRepository.GeneratePlayers(1, request.ExpectedDataCount, teams)) { if (ExitIfRequestedCancel(context)) { return; } response.Players.Add(player); if (!response.Teams.ContainsKey(player.TeamCode)) { response.Teams.Add(player.TeamCode, teams[player.TeamCode]); } ++fetchCount; if (fetchCount == s_FetchSize) { await Task.Delay(s_DelayMilliseconds).ConfigureAwait(false); await responseStream.WriteAsync(response).ConfigureAwait(false); response.Players.Clear(); response.Teams.Clear(); fetchCount = 0; } } if (response.Players.Count > 0) { await Task.Delay(s_DelayMilliseconds).ConfigureAwait(false); await responseStream.WriteAsync(response).ConfigureAwait(false); } }
/// <summary> /// /// </summary> /// <param name="request"></param> /// <param name="responseStream"></param> /// <param name="context"></param> /// <returns></returns> public async override Task PushPlayer(PlayerSearchRequest request, IServerStreamWriter <PlayerSearchResponse> responseStream, ServerCallContext context) { string callCounter = GetCallCounter(context); s_Logger.Info(string.Format("[{0}] Requested {1} players.", callCounter, request.ExpectedDataCount)); IDictionary <string, Team> teams = SampleDataRepository.GetTeams(10); PlayerSearchResponse response = new PlayerSearchResponse(); Random r = new Random(); while (true) { await Task.Delay(r.Next(5, 20) * 1000); if (ExitIfRequestedCancel(context)) { return; } foreach (Player player in SampleDataRepository.GeneratePlayers(1, request.ExpectedDataCount, teams)) { response.Players.Add(player); if (!response.Teams.ContainsKey(player.TeamCode)) { response.Teams.Add(player.TeamCode, teams[player.TeamCode]); } } if (response.Players.Count > 0) { await Task.Delay(s_DelayMilliseconds).ConfigureAwait(false); await responseStream.WriteAsync(response).ConfigureAwait(false); } } }