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));
                }
            }
        }
        public async ValueTask ExecuteAsync(UnregisterSessionCommand command)
        {
            var loginInfo = new UnregisterRequest
            {
                SessionId = command.SessionId
            };

            await m_MessageQueueService.RequestAsync(
                "session.unregister",
                loginInfo.ToByteArray()).ConfigureAwait(false);
        }
        public async ValueTask ExecuteAsync(JoinRoomCommand command)
        {
            var request = new JoinRoomRequest
            {
                SessionId = command.SessionId,
                Room      = command.Room
            };

            await m_MessageQueueService.RequestAsync(
                "room.join",
                request.ToByteArray()).ConfigureAwait(false);
        }
        public async ValueTask ExecuteAsync(LeaveRoomCommand command)
        {
            var request = new LeaveRoomRequest
            {
                SessionId = command.SessionId,
                Room      = command.Room ?? string.Empty
            };

            await m_MessageQueueService
            .RequestAsync("room.leave", request.ToByteArray())
            .ConfigureAwait(false);
        }
        public async ValueTask <string?> GetAsync(GetRoomBySessionidQuery query)
        {
            var request = new GetRoomBySessionIdRequest
            {
                SessionId = query.SessionId
            };

            var response = await m_MessageQueueService.RequestAsync(
                "room.session.get",
                request.ToByteArray()).ConfigureAwait(false);

            var getRoomResponse = GetRoomBySessionIdResponse.Parser.ParseFrom(response.Data);

            return(getRoomResponse.Room);
        }
示例#6
0
        public async IAsyncEnumerable <PlayerInfo> QueryAsync(ListPlayerQuery query)
        {
            var roomQuery = new RoomSessionsRequest
            {
                Room = query.Room
            };

            var result = await m_MessageQueueService.RequestAsync("room.query", roomQuery.ToByteArray());

            var queryResponse = RoomSessionsResponse.Parser.ParseFrom(result.Data);

            foreach (var player in queryResponse.Players)
            {
                yield return(new PlayerInfo(player.SessionId, player.ConnectorId, player.Name));
            }
        }
        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);
            }
        }