示例#1
0
        public async ValueTask HandleAsync(Msg msg, CancellationToken cancellationToken)
        {
            var query = GetPlayerRequest.Parser.ParseFrom(msg.Data);

            var playerReg = await m_PlayerService.GetAsync(new GetPlayerBySessionIdQuery
            {
                SessionId = query.SessionId
            }).ConfigureAwait(false);


            var reply = new GetPlayerResponse();

            if (playerReg != null)
            {
                reply.Player = new PlayerInfo
                {
                    SessionId   = playerReg.SessionId,
                    ConnectorId = playerReg.ConnectorId,
                    Name        = playerReg.Name
                };

                await m_MessageQueueService.PublishAsync(msg.Reply, reply.ToByteArray()).ConfigureAwait(false);
            }
            else
            {
                reply.Player = null;

                await m_MessageQueueService.PublishAsync(msg.Reply, reply.ToByteArray()).ConfigureAwait(false);
            }
        }
示例#2
0
        public async ValueTask HandleAsync(Msg msg, CancellationToken cancellationToken)
        {
            var packet = QueuePacket.Parser.ParseFrom(msg.Data);

            m_Logger.LogInformation($"chat.player.list => Receive packet from {packet.SessionId}");

            var playerInRoom = await m_GetRoomService
                               .GetAsync(new GetRoomBySessionIdQuery
            {
                SessionId = packet.SessionId
            }).ConfigureAwait(false);

            if (string.IsNullOrEmpty(playerInRoom))
            {
                return;
            }

            var fromPlayerInfo = await m_PlayerQueryService
                                 .QueryAsync(new PlayerInfoQuery
            {
                SessionIds = new[] { packet.SessionId }
            })
                                 .FirstOrDefaultAsync()
                                 .ConfigureAwait(false);

            if (fromPlayerInfo?.SessionId != packet.SessionId)
            {
                return;
            }

            var responseSessionIds = m_RoomListService.QueryAsync(new RoomSessionsQuery
            {
                Room = playerInRoom
            });

            var playersContent = new PlayerList
            {
                Room = playerInRoom
            };

            var allPlayers = m_PlayerQueryService.QueryAsync(new PlayerInfoQuery
            {
                SessionIds = await responseSessionIds.ToArrayAsync().ConfigureAwait(false)
            });

            playersContent.Players.AddRange(allPlayers.Select(player => player.Name).ToEnumerable());

            var sendMsg = new SendPacket
            {
                Subject = "chat.player.list",
                Payload = playersContent.ToByteString()
            };

            sendMsg.SessionIds.Add(packet.SessionId);

            await m_MessageQueueService.PublishAsync($"connect.send.{fromPlayerInfo.ConnectorId}", sendMsg.ToByteArray());
        }
示例#3
0
        public async void LoadItens()
        {
            var itens = await _service.GetAsync();

            foreach (var item in itens.data)
            {
                collection.Add(item);
            }
        }
示例#4
0
        public async Task DeleteAsync(INoteIdentity identity)
        {
            var connectedReminders = from item in await _noteReminderGetService.GetAsync()
                                         where item.LinkedNote.Id == identity.Id select item;

            foreach (var i in connectedReminders)
            {
                await _noteReminderDeleteService.DeleteAsync(new NoteReminderIdentityModel(i.Id));
            }
            await _dataAccessor.DeleteAsync(identity);
        }
示例#5
0
        public async ValueTask HandleAsync(Msg msg, CancellationToken cancellationToken)
        {
            var request = GetRoomBySessionIdRequest.Parser.ParseFrom(msg.Data);

            var room = await m_GetRoomService
                       .GetAsync(new GetRoomBySessionIdQuery
            {
                SessionId = request.SessionId
            })
                       .ConfigureAwait(false);

            var response = new GetRoomBySessionIdResponse
            {
                Room = room ?? string.Empty
            };

            await m_MessageQueueService.PublishAsync(
                msg.Reply,
                response.ToByteArray()).ConfigureAwait(false);
        }
        public async ValueTask HandleAsync(Msg msg, CancellationToken cancellationToken)
        {
            var packet = QueuePacket.Parser.ParseFrom(msg.Data);

            m_Logger.LogInformation($"Receive packet from {packet.SessionId}");

            var content = ChatMessage.Parser.ParseFrom(packet.Payload);

            m_Logger.LogInformation($"Scope: {content.Scope}, Target: {content.Target}, Message: {content.Message}");

            var fromPlayerInfo = await m_QueryPlayerService
                                 .GetAsync(new PlayerInfoQuery
            {
                SessionId = packet.SessionId
            })
                                 .ConfigureAwait(false);

            if (fromPlayerInfo?.SessionId != packet.SessionId)
            {
                return;
            }

            var room = await m_GetRoomService.GetAsync(new GetRoomBySessionidQuery
            {
                SessionId = fromPlayerInfo.SessionId
            }).ConfigureAwait(false);

            if (string.IsNullOrEmpty(room))
            {
                return;
            }

            var sendContent = new ChatMessage
            {
                Scope   = content.Scope,
                From    = fromPlayerInfo.Name,
                Message = content.Message
            };

            var roomPlayers = m_RoomListService
                              .QueryAsync(new ListPlayerQuery
            {
                Room = room
            });

            switch (content.Scope)
            {
            case Scope.Room:
                var contentByteString = sendContent.ToByteString();

                await foreach (var g in roomPlayers.GroupBy(player => player.ConnectorId))
                {
                    var sendMsg = new SendPacket
                    {
                        Subject = "chat.receive"
                    };

                    sendMsg.SessionIds.AddRange(g.Select(player => player.SessionId).ToEnumerable());

                    sendMsg.Payload = contentByteString;

                    await m_MessageQueueService.PublishAsync(
                        $"connect.send.{g.Key}", sendMsg.ToByteArray()).ConfigureAwait(false);
                }
                break;

            case Scope.Person:

                var targetName = content.Target;

                var matchedPlayer = await roomPlayers
                                    .Where(player => player.SessionId != fromPlayerInfo.SessionId)
                                    .Where(player => player.Name.Equals(targetName, StringComparison.OrdinalIgnoreCase))
                                    .FirstOrDefaultAsync()
                                    .ConfigureAwait(false);

                if (matchedPlayer != null)
                {
                    sendContent.Target = matchedPlayer.Name;

                    if (fromPlayerInfo.ConnectorId == matchedPlayer.ConnectorId)
                    {
                        var sendMsg = new SendPacket
                        {
                            Subject = "chat.receive"
                        };

                        sendMsg.SessionIds.Add(matchedPlayer.SessionId);
                        sendMsg.SessionIds.Add(fromPlayerInfo.SessionId);

                        sendMsg.Payload = sendContent.ToByteString();

                        await m_MessageQueueService.PublishAsync(
                            $"connect.send.{matchedPlayer.ConnectorId}",
                            sendMsg.ToByteArray()).ConfigureAwait(false);
                    }
                    else
                    {
                        var sendMsg = new SendPacket
                        {
                            Subject = "chat.receive"
                        };

                        sendMsg.Payload = sendContent.ToByteString();

                        sendMsg.SessionIds.Add(matchedPlayer.SessionId);

                        await m_MessageQueueService.PublishAsync(
                            $"connect.send.{matchedPlayer.ConnectorId}",
                            sendMsg.ToByteArray()).ConfigureAwait(false);

                        sendMsg.SessionIds.Clear();
                        sendMsg.SessionIds.Add(fromPlayerInfo.SessionId);

                        await m_MessageQueueService.PublishAsync(
                            $"connect.send.{fromPlayerInfo.ConnectorId}",
                            sendMsg.ToByteArray()).ConfigureAwait(false);
                    }
                }
                else
                {
                    var sendMsg = new SendPacket
                    {
                        Subject = "chat.receive"
                    };

                    sendMsg.SessionIds.Add(fromPlayerInfo.SessionId);

                    sendContent.Target = fromPlayerInfo.Name;

                    var notFoundPlayerContent = new ChatMessage
                    {
                        Scope   = Scope.System,
                        Message = $"Can't send message to {targetName}",
                        From    = "System",
                        Target  = fromPlayerInfo.Name
                    };

                    sendMsg.Payload = notFoundPlayerContent.ToByteString();

                    await m_MessageQueueService.PublishAsync(
                        $"connect.send.{fromPlayerInfo.ConnectorId}",
                        sendMsg.ToByteArray()).ConfigureAwait(false);
                }
                break;
            }
        }