public async IAsyncEnumerable <PlayerInfo> QueryAsync(PlayerInfoQuery query)
        {
            foreach (var sessionId in query.SessionIds)
            {
                var getPlayerQuery = new GetPlayerRequest
                {
                    SessionId = sessionId
                };

                var queryReply = await m_MessageQueueService
                                 .RequestAsync("session.get", getPlayerQuery.ToByteArray())
                                 .ConfigureAwait(false);

                var data = GetPlayerResponse.Parser.ParseFrom(queryReply.Data);

                if (data.Player == null)
                {
                    await m_LeaveRoomService
                    .ExecuteAsync(new LeaveRoomCommand
                    {
                        SessionId = sessionId,
                        Room      = "test"
                    })
                    .ConfigureAwait(false);
                }
                else
                {
                    yield return(new PlayerInfo(data.Player.SessionId, data.Player.ConnectorId, data.Player.Name));
                }
            }
        }
Beispiel #2
0
        public Player GetPlayer(int id)
        {
            var request = new GetPlayerRequest
            {
                Id = id
            };

            var response = SendRequest <GetPlayerRequest, GetPlayerResponse>(RequestType.GetPlayer, request);

            return(response.Player);
        }
Beispiel #3
0
        public async Task <GetPlayerResponse> GetPlayerAsync(GetPlayerRequest request)
        {
            var response = ServiceMessageFactory <GetPlayerResponse> .CreateFrom(request);

            response.Player = cache.FirstOrDefault(i => i.Id == request.PlayerId);
            if (response.Player == null)
            {
                response.Errors = "Unable to find player.";
            }
            return(await Task.FromResult(response));
        }
        public async ValueTask <PlayerInfo?> GetAsync(PlayerInfoQuery query)
        {
            var getPlayerQuery = new GetPlayerRequest
            {
                SessionId = query.SessionId
            };

            var queryReply = await m_MessageQueueService
                             .RequestAsync("session.get", getPlayerQuery.ToByteArray())
                             .ConfigureAwait(false);

            var data = GetPlayerResponse.Parser.ParseFrom(queryReply.Data);

            if (data.Player != null)
            {
                return(new PlayerInfo(data.Player.SessionId, data.Player.ConnectorId, data.Player.Name));
            }
            else
            {
                return(null);
            }
        }