Esempio n. 1
0
        protected override async Task Handle(PJoinPacket packet, IPlayerEntity player)
        {
            switch (packet.RequestType)
            {
            case PJoinPacketType.Requested:
            case PJoinPacketType.Invited:
                await player.EmitEventAsync(new GroupInvitationSendEvent
                {
                    Target = _manager.GetPlayerByCharacterId(packet.CharacterId)
                });

                break;

            case PJoinPacketType.Accepted:
                GroupInvitDto group = _groupManager.GetPendingInvitationsByCharacterId(player.Id)?.FirstOrDefault(s => s.Target == player);

                if (group == null)
                {
                    return;
                }

                await player.EmitEventAsync(new GroupInvitationAcceptEvent
                {
                    Invitation = group
                });

                break;

            case PJoinPacketType.Declined:
                GroupInvitDto invitation = _groupManager.GetPendingInvitationsByCharacterId(player.Id)?.FirstOrDefault(s => s.Target == player);

                if (invitation == null)
                {
                    return;
                }

                await player.EmitEventAsync(new GroupInvitationRefuseEvent()
                {
                    Invitation = invitation
                });

                break;

            case PJoinPacketType.Sharing:
                break;

            case PJoinPacketType.AcceptedShare:
                break;

            case PJoinPacketType.DeclinedShare:
                break;
            }
        }
Esempio n. 2
0
        public void RemoveInvitation(GroupInvitDto dto)
        {
            if (_pendingInvitations.ContainsKey(dto.Id))
            {
                if (_pendingInvitationsByCharacterId.TryGetValue(dto.Target.Id, out List <GroupInvitDto> group))
                {
                    group.Remove(dto);
                }

                _pendingInvitations.Remove(dto.Id);
            }
        }
Esempio n. 3
0
        public GroupInvitDto CreateInvitation(IPlayerEntity sender, IPlayerEntity target)
        {
            var invitation = new GroupInvitDto
            {
                Id          = Guid.NewGuid(),
                Sender      = sender,
                Target      = target,
                CreationUtc = DateTime.UtcNow
            };

            _pendingInvitations.Add(invitation.Id, invitation);
            if (!_pendingInvitationsByCharacterId.TryGetValue(target.Id, out List <GroupInvitDto> invitations))
            {
                invitations = new List <GroupInvitDto>();
                _pendingInvitationsByCharacterId[target.Id] = invitations;
            }

            invitations.Add(invitation);

            return(invitation);
        }
Esempio n. 4
0
        public void AcceptInvitation(GroupInvitDto dto)
        {
            if (!_pendingInvitations.TryGetValue(dto.Id, out dto))
            {
                return;
            }

            RemoveInvitation(dto);

            if (dto.Target.HasGroup)
            {
                return;
            }

            if (!dto.Sender.HasGroup)
            {
                CreateGroup(dto.Sender);
            }


            dto.Target.JoinGroup(dto.Sender.Group).ConfigureAwait(false).GetAwaiter().GetResult();
        }