public async Task Test_Leaving_Three_Person_GroupAsync()
        {
            for (var i = 1; i < 3; i++)
            {
                _characters[i].GroupRequestCharacterIds
                .TryAdd(_characters[0].CharacterId, _characters[0].CharacterId);

                var pjoinPacket = new PjoinPacket
                {
                    RequestType = GroupRequestType.Accepted,
                    CharacterId = _characters[i].CharacterId
                };

                await _pJoinPacketHandler !.ExecuteAsync(pjoinPacket, _characters[0].Session).ConfigureAwait(false);
            }

            Assert.IsTrue(_characters[0].Group !.IsGroupFull &&
                          _characters[1].Group !.IsGroupFull &&
                          _characters[2].Group !.IsGroupFull && _characters[0].Group !
                          .IsGroupLeader(_characters[0].CharacterId));

            await _pLeavePacketHandler !.ExecuteAsync(new PleavePacket(), _characters[1].Session).ConfigureAwait(false);

            Assert.IsTrue(_characters[0].Group !
                          .IsGroupLeader(_characters[0].CharacterId));
        }
        public async Task Test_Join_Full_GroupAsync()
        {
            PjoinPacket pjoinPacket;

            for (var i = 1; i < 3; i++)
            {
                _characters[i].GroupRequestCharacterIds
                .TryAdd(_characters[0].CharacterId, _characters[0].CharacterId);

                pjoinPacket = new PjoinPacket
                {
                    RequestType = GroupRequestType.Accepted,
                    CharacterId = _characters[i].CharacterId
                };

                await _pJoinPacketHandler !.ExecuteAsync(pjoinPacket, _characters[0].Session).ConfigureAwait(false);
            }

            Assert.IsTrue(_characters[0].Group !.IsGroupFull &&
                          _characters[1].Group !.IsGroupFull &&
                          _characters[2].Group !.IsGroupFull);

            _characters[3].GroupRequestCharacterIds
            .TryAdd(_characters[0].CharacterId, _characters[0].CharacterId);

            pjoinPacket = new PjoinPacket
            {
                RequestType = GroupRequestType.Accepted,
                CharacterId = _characters[3].CharacterId
            };

            await _pJoinPacketHandler !.ExecuteAsync(pjoinPacket, _characters[0].Session).ConfigureAwait(false);

            Assert.IsTrue(_characters[3].Group !.Count == 1);
        }
        public void Test_Leaveing_Two_Person_Group()
        {
            for (var i = 1; i < 3; i++)
            {
                ServerManager.Instance.Sessions.Values.ElementAt(i).Character.GroupRequestCharacterIds
                .Add(ServerManager.Instance.Sessions.Values.ElementAt(0).Character.CharacterId);

                var pjoinPacket = new PjoinPacket
                {
                    RequestType = GroupRequestType.Accepted,
                    CharacterId = ServerManager.Instance.Sessions.Values.ElementAt(i).Character.CharacterId
                };

                _handlers.ElementAt(0).ManageGroup(pjoinPacket);
            }

            Assert.IsTrue(ServerManager.Instance.Sessions.Values.ElementAt(0).Character.Group.IsGroupFull &&
                          ServerManager.Instance.Sessions.Values.ElementAt(1).Character.Group.IsGroupFull &&
                          ServerManager.Instance.Sessions.Values.ElementAt(2).Character.Group.IsGroupFull&& ServerManager
                          .Instance.Sessions.Values.ElementAt(0).Character.Group
                          .IsGroupLeader(ServerManager.Instance.Sessions.Values.ElementAt(0).Character.CharacterId));

            _handlers.ElementAt(1).LeaveGroup(new PleavePacket());

            Assert.IsTrue(ServerManager.Instance.Sessions.Values.ElementAt(0).Character.Group
                          .IsGroupLeader(ServerManager.Instance.Sessions.Values.ElementAt(0).Character.CharacterId));
        }
        public void Test_Join_Full_Group()
        {
            PjoinPacket pjoinPacket;

            for (var i = 1; i < 3; i++)
            {
                ServerManager.Instance.Sessions.Values.ElementAt(i).Character.GroupRequestCharacterIds
                .Add(ServerManager.Instance.Sessions.Values.ElementAt(0).Character.CharacterId);

                pjoinPacket = new PjoinPacket
                {
                    RequestType = GroupRequestType.Accepted,
                    CharacterId = ServerManager.Instance.Sessions.Values.ElementAt(i).Character.CharacterId
                };

                _handlers.ElementAt(0).ManageGroup(pjoinPacket);
            }

            Assert.IsTrue(ServerManager.Instance.Sessions.Values.ElementAt(0).Character.Group.IsGroupFull &&
                          ServerManager.Instance.Sessions.Values.ElementAt(1).Character.Group.IsGroupFull &&
                          ServerManager.Instance.Sessions.Values.ElementAt(2).Character.Group.IsGroupFull);

            ServerManager.Instance.Sessions.Values.ElementAt(3).Character.GroupRequestCharacterIds
            .Add(ServerManager.Instance.Sessions.Values.ElementAt(0).Character.CharacterId);

            pjoinPacket = new PjoinPacket
            {
                RequestType = GroupRequestType.Accepted,
                CharacterId = ServerManager.Instance.Sessions.Values.ElementAt(3).Character.CharacterId
            };

            _handlers.ElementAt(0).ManageGroup(pjoinPacket);
            Assert.IsTrue(ServerManager.Instance.Sessions.Values.ElementAt(3).Character.Group.Count == 1);
        }
Exemple #5
0
        public void Test_Leaving_Three_Person_Group()
        {
            for (var i = 1; i < 3; i++)
            {
                _characters[i].GroupRequestCharacterIds
                .TryAdd(_characters[0].CharacterId, _characters[0].CharacterId);

                var pjoinPacket = new PjoinPacket
                {
                    RequestType = GroupRequestType.Accepted,
                    CharacterId = _characters[i].CharacterId
                };

                _pJoinPacketHandler.Execute(pjoinPacket, _characters[0].Session);
            }

            Assert.IsTrue(_characters[0].Group.IsGroupFull &&
                          _characters[1].Group.IsGroupFull &&
                          _characters[2].Group.IsGroupFull && _characters[0].Group
                          .IsGroupLeader(_characters[0].CharacterId));

            _pLeavePacketHandler.Execute(new PleavePacket(), _characters[1].Session);

            Assert.IsTrue(_characters[0].Group
                          .IsGroupLeader(_characters[0].CharacterId));
        }
Exemple #6
0
        public void Test_Join_Full_Group()
        {
            PjoinPacket pjoinPacket;

            for (var i = 1; i < 3; i++)
            {
                _characters[i].GroupRequestCharacterIds
                .TryAdd(_characters[0].CharacterId, _characters[0].CharacterId);

                pjoinPacket = new PjoinPacket
                {
                    RequestType = GroupRequestType.Accepted,
                    CharacterId = _characters[i].CharacterId
                };

                _handlers.ElementAt(0).ManageGroup(pjoinPacket);
            }

            Assert.IsTrue(_characters[0].Group.IsGroupFull &&
                          _characters[1].Group.IsGroupFull &&
                          _characters[2].Group.IsGroupFull);

            _characters[3].GroupRequestCharacterIds
            .TryAdd(_characters[0].CharacterId, _characters[0].CharacterId);

            pjoinPacket = new PjoinPacket
            {
                RequestType = GroupRequestType.Accepted,
                CharacterId = _characters[3].CharacterId
            };

            _handlers.ElementAt(0).ManageGroup(pjoinPacket);
            Assert.IsTrue(_characters[3].Group.Count == 1);
        }
        public void Test_Join_Full_Group()
        {
            PjoinPacket pjoinPacket;

            for (var i = 1; i < 3; i++)
            {
                _characters[i].GroupRequestCharacterIds
                .TryAdd(_characters[0].CharacterId, _characters[0].CharacterId);

                pjoinPacket = new PjoinPacket
                {
                    RequestType = GroupRequestType.Accepted,
                    CharacterId = _characters[i].CharacterId
                };

                _pJoinPacketHandler.Execute(pjoinPacket, _characters[0].Session);
            }

            Assert.IsTrue(_characters[0].Group.IsGroupFull &&
                          _characters[1].Group.IsGroupFull &&
                          _characters[2].Group.IsGroupFull);

            _characters[3].GroupRequestCharacterIds
            .TryAdd(_characters[0].CharacterId, _characters[0].CharacterId);

            pjoinPacket = new PjoinPacket
            {
                RequestType = GroupRequestType.Accepted,
                CharacterId = _characters[3].CharacterId
            };

            _pJoinPacketHandler.Execute(pjoinPacket, _characters[0].Session);
            Assert.IsTrue(_characters[3].Group.Count == 1);
        }
Exemple #8
0
        public void Test_Leaving_Three_Person_Group()
        {
            for (var i = 1; i < 3; i++)
            {
                _characters[i].GroupRequestCharacterIds
                .TryAdd(_characters[0].CharacterId, _characters[0].CharacterId);

                var pjoinPacket = new PjoinPacket
                {
                    RequestType = GroupRequestType.Accepted,
                    CharacterId = _characters[i].CharacterId
                };

                _handlers.ElementAt(0).ManageGroup(pjoinPacket);
            }

            Assert.IsTrue(_characters[0].Group.IsGroupFull &&
                          _characters[1].Group.IsGroupFull &&
                          _characters[2].Group.IsGroupFull && _characters[0].Group
                          .IsGroupLeader(_characters[0].CharacterId));

            _handlers.ElementAt(1).LeaveGroup(new PleavePacket());

            Assert.IsTrue(_characters[0].Group
                          .IsGroupLeader(_characters[0].CharacterId));
        }
Exemple #9
0
        public void Test_Decline_Not_Requested_Group()
        {
            var pjoinPacket = new PjoinPacket
            {
                RequestType = GroupRequestType.Declined,
                CharacterId = _characters[1].CharacterId
            };

            _handlers.ElementAt(0).ManageGroup(pjoinPacket);
            Assert.IsTrue(_characters[0].Group.Count == 1 &&
                          _characters[1].Group.Count == 1);
        }
        public void Test_Decline_Not_Requested_Group()
        {
            var pjoinPacket = new PjoinPacket
            {
                RequestType = GroupRequestType.Declined,
                CharacterId = _characters[1].CharacterId
            };

            _pJoinPacketHandler.Execute(pjoinPacket, _characters[0].Session);
            Assert.IsTrue((_characters[0].Group.Count == 1) &&
                          (_characters[1].Group.Count == 1));
        }
        public async Task Test_Decline_Not_Requested_GroupAsync()
        {
            var pjoinPacket = new PjoinPacket
            {
                RequestType = GroupRequestType.Declined,
                CharacterId = _characters[1].CharacterId
            };

            await _pJoinPacketHandler !.ExecuteAsync(pjoinPacket, _characters[0].Session).ConfigureAwait(false);

            Assert.IsTrue((_characters[0].Group !.Count == 1) &&
                          (_characters[1].Group !.Count == 1));
        }
        public void Test_Last_Request_Not_Null_After_One()
        {
            for (var i = 1; i < 3; i++)
            {
                var pjoinPacket = new PjoinPacket
                {
                    RequestType = GroupRequestType.Invited,
                    CharacterId = _characters[i].CharacterId
                };

                _pJoinPacketHandler.Execute(pjoinPacket, _characters[0].Session);
            }
            Assert.IsNotNull(_characters[0].LastGroupRequest);
        }
        public async Task Test_Last_Request_Not_Null_After_OneAsync()
        {
            for (var i = 1; i < 3; i++)
            {
                var pjoinPacket = new PjoinPacket
                {
                    RequestType = GroupRequestType.Invited,
                    CharacterId = _characters[i].CharacterId
                };

                await _pJoinPacketHandler !.ExecuteAsync(pjoinPacket, _characters[0].Session).ConfigureAwait(false);
            }
            Assert.IsNotNull(_characters[0].LastGroupRequest);
        }
        public void Test_Rejected_Group_Join()
        {
            ServerManager.Instance.Sessions.Values.ElementAt(1).Character.GroupRequestCharacterIds
            .Add(ServerManager.Instance.Sessions.Values.ElementAt(0).Character.CharacterId);

            var pjoinPacket = new PjoinPacket
            {
                RequestType = GroupRequestType.Declined,
                CharacterId = ServerManager.Instance.Sessions.Values.ElementAt(1).Character.CharacterId
            };

            _handlers.ElementAt(0).ManageGroup(pjoinPacket);
            Assert.IsTrue(ServerManager.Instance.Sessions.Values.ElementAt(0).Character.Group.Count == 1 &&
                          ServerManager.Instance.Sessions.Values.ElementAt(1).Character.Group.Count == 1);
        }
Exemple #15
0
        public void Test_Decline_Group_Join_Requested()
        {
            _characters[1].GroupRequestCharacterIds
            .TryAdd(_characters[0].CharacterId, _characters[0].CharacterId);

            var pjoinPacket = new PjoinPacket
            {
                RequestType = GroupRequestType.Declined,
                CharacterId = _characters[1].CharacterId
            };

            _pJoinPacketHandler.Execute(pjoinPacket, _characters[0].Session);
            _pLeavePacketHandler.Execute(new PleavePacket(), _characters[0].Session);
            Assert.IsTrue((_characters[0].Group.Count == 1) &&
                          (_characters[1].Group.Count == 1));
        }
Exemple #16
0
        public void Test_Accept_Group_Join_Requested()
        {
            _characters[1].GroupRequestCharacterIds
            .TryAdd(_characters[0].CharacterId, _characters[0].CharacterId);

            var pjoinPacket = new PjoinPacket
            {
                RequestType = GroupRequestType.Accepted,
                CharacterId = _characters[1].CharacterId
            };

            _handlers.ElementAt(0).ManageGroup(pjoinPacket);
            Assert.IsTrue(_characters[0].Group.Count > 1 &&
                          _characters[1].Group.Count > 1 &&
                          _characters[0].Group.GroupId
                          == _characters[1].Group.GroupId);
        }
        public void Test_Two_Request_Less_5_Sec_Delay()
        {
            SystemTime.Freeze(SystemTime.Now());
            for (var i = 1; i < 3; i++)
            {
                var pjoinPacket = new PjoinPacket
                {
                    RequestType = GroupRequestType.Invited,
                    CharacterId = _characters[i].CharacterId
                };

                SystemTime.Freeze(SystemTime.Now().AddSeconds(1));
                _pJoinPacketHandler.Execute(pjoinPacket, _characters[0].Session);
            }

            Assert.IsTrue(_characters[0].GroupRequestCharacterIds.Count == 1);
        }
        public void Test_Accept_Group_Join_Requested()
        {
            _characters[1].GroupRequestCharacterIds
            .TryAdd(_characters[0].CharacterId, _characters[0].CharacterId);

            var pjoinPacket = new PjoinPacket
            {
                RequestType = GroupRequestType.Accepted,
                CharacterId = _characters[1].CharacterId
            };

            _pJoinPacketHandler.Execute(pjoinPacket, _characters[0].Session);
            Assert.IsTrue((_characters[0].Group.Count > 1) &&
                          (_characters[1].Group.Count > 1) &&
                          (_characters[0].Group.GroupId
                           == _characters[1].Group.GroupId));
        }
        public async Task Test_Decline_Group_Join_RequestedAsync()
        {
            _characters[1].GroupRequestCharacterIds
            .TryAdd(_characters[0].CharacterId, _characters[0].CharacterId);

            var pjoinPacket = new PjoinPacket
            {
                RequestType = GroupRequestType.Declined,
                CharacterId = _characters[1].CharacterId
            };

            await _pJoinPacketHandler !.ExecuteAsync(pjoinPacket, _characters[0].Session).ConfigureAwait(false);
            await _pLeavePacketHandler !.ExecuteAsync(new PleavePacket(), _characters[0].Session).ConfigureAwait(false);

            Assert.IsTrue((_characters[0].Group !.Count == 1) &&
                          (_characters[1].Group !.Count == 1));
        }
        public async Task Test_Two_Request_Less_5_Sec_DelayAsync()
        {
            SystemTime.Freeze(SystemTime.Now());
            for (var i = 1; i < 3; i++)
            {
                var pjoinPacket = new PjoinPacket
                {
                    RequestType = GroupRequestType.Invited,
                    CharacterId = _characters[i].CharacterId
                };

                SystemTime.Freeze(SystemTime.Now().AddSeconds(1));
                await _pJoinPacketHandler !.ExecuteAsync(pjoinPacket, _characters[0].Session).ConfigureAwait(false);
            }

            Assert.IsTrue(_characters[0].GroupRequestCharacterIds.Count == 1);
        }
        public async Task Test_Accept_Group_Join_RequestedAsync()
        {
            _characters[1].GroupRequestCharacterIds
            .TryAdd(_characters[0].CharacterId, _characters[0].CharacterId);

            var pjoinPacket = new PjoinPacket
            {
                RequestType = GroupRequestType.Accepted,
                CharacterId = _characters[1].CharacterId
            };

            await _pJoinPacketHandler !.ExecuteAsync(pjoinPacket, _characters[0].Session).ConfigureAwait(false);

            Assert.IsTrue((_characters[0].Group !.Count > 1) &&
                          (_characters[1].Group !.Count > 1) &&
                          (_characters[0].Group !.GroupId
                           == _characters[1].Group !.GroupId));
        }
Exemple #22
0
        public void Test_Leaving_Two_Person_Group()
        {
            _characters[1].GroupRequestCharacterIds
            .TryAdd(_characters[0].CharacterId, _characters[0].CharacterId);

            var pjoinPacket = new PjoinPacket
            {
                RequestType = GroupRequestType.Accepted,
                CharacterId = _characters[1].CharacterId
            };

            _handlers.ElementAt(0).ManageGroup(pjoinPacket);
            Assert.IsTrue(_characters[0].Group.Count > 1 &&
                          _characters[1].Group.Count > 1 &&
                          _characters[0].Group.GroupId
                          == _characters[1].Group.GroupId);

            _handlers.ElementAt(0).LeaveGroup(new PleavePacket());

            Assert.IsTrue(_characters[0].Group.Count == 1 &&
                          _characters[1].Group.Count == 1);
        }
        public void Test_Leaving_Two_Person_Group()
        {
            ServerManager.Instance.Sessions.Values.ElementAt(1).Character.GroupRequestCharacterIds
            .Add(ServerManager.Instance.Sessions.Values.ElementAt(0).Character.CharacterId);

            var pjoinPacket = new PjoinPacket
            {
                RequestType = GroupRequestType.Accepted,
                CharacterId = ServerManager.Instance.Sessions.Values.ElementAt(1).Character.CharacterId
            };

            _handlers.ElementAt(0).ManageGroup(pjoinPacket);
            Assert.IsTrue(ServerManager.Instance.Sessions.Values.ElementAt(0).Character.Group.Count > 1 &&
                          ServerManager.Instance.Sessions.Values.ElementAt(1).Character.Group.Count > 1 &&
                          ServerManager.Instance.Sessions.Values.ElementAt(0).Character.Group.GroupId
                          == ServerManager.Instance.Sessions.Values.ElementAt(1).Character.Group.GroupId);

            _handlers.ElementAt(0).LeaveGroup(new PleavePacket());

            Assert.IsTrue(ServerManager.Instance.Sessions.Values.ElementAt(0).Character.Group.Count == 1 &&
                          ServerManager.Instance.Sessions.Values.ElementAt(1).Character.Group.Count == 1);
        }
Exemple #24
0
        public void Test_Leaving_Two_Person_Group()
        {
            _characters[1].GroupRequestCharacterIds
            .TryAdd(_characters[0].CharacterId, _characters[0].CharacterId);

            var pjoinPacket = new PjoinPacket
            {
                RequestType = GroupRequestType.Accepted,
                CharacterId = _characters[1].CharacterId
            };

            _pJoinPacketHandler.Execute(pjoinPacket, _characters[0].Session);
            Assert.IsTrue((_characters[0].Group.Count > 1) &&
                          (_characters[1].Group.Count > 1) &&
                          (_characters[0].Group.GroupId
                           == _characters[1].Group.GroupId));

            _pLeavePacketHandler.Execute(new PleavePacket(), _characters[0].Session);

            Assert.IsTrue((_characters[0].Group.Count == 1) &&
                          (_characters[1].Group.Count == 1));
        }
Exemple #25
0
        /// <summary>
        ///     pjoin packet
        /// </summary>
        /// <param name="pjoinPacket"></param>
        public void ManageGroup(PjoinPacket pjoinPacket)
        {
            var targetSession =
                ServerManager.Instance.Sessions.Values.FirstOrDefault(s =>
                                                                      s.Character.CharacterId == pjoinPacket.CharacterId);

            if (targetSession == null && pjoinPacket.RequestType != GroupRequestType.Sharing)
            {
                Logger.Log.Error(Language.Instance.GetMessageFromKey(LanguageKey.UNABLE_TO_REQUEST_GROUP,
                                                                     Session.Account.Language));
                return;
            }

            switch (pjoinPacket.RequestType)
            {
            case GroupRequestType.Requested:
            case GroupRequestType.Invited:
                if (pjoinPacket.CharacterId == Session.Character.CharacterId)
                {
                    return;
                }

                if (targetSession.Character.Group.IsGroupFull)
                {
                    Session.SendPacket(new InfoPacket
                    {
                        Message = Language.Instance.GetMessageFromKey(LanguageKey.GROUP_FULL,
                                                                      Session.Account.Language)
                    });
                    return;
                }

                if (targetSession.Character.Group.Count > 1 && Session.Character.Group.Count > 1)
                {
                    Session.SendPacket(new InfoPacket
                    {
                        Message = Language.Instance.GetMessageFromKey(LanguageKey.ALREADY_IN_GROUP,
                                                                      Session.Account.Language)
                    });
                    return;
                }

                if (Session.Character.IsRelatedToCharacter(pjoinPacket.CharacterId, CharacterRelationType.Blocked))
                {
                    Session.SendPacket(new InfoPacket
                    {
                        Message = Language.Instance.GetMessageFromKey(LanguageKey.BLACKLIST_BLOCKED,
                                                                      Session.Account.Language)
                    });
                    return;
                }

                if (targetSession.Character.GroupRequestBlocked)
                {
                    Session.SendPacket(new MsgPacket
                    {
                        Message = Language.Instance.GetMessageFromKey(LanguageKey.GROUP_BLOCKED,
                                                                      Session.Account.Language)
                    });
                    return;
                }

                Session.Character.GroupRequestCharacterIds.Add(pjoinPacket.CharacterId);

                if (Session.Character.Group.Count == 1 || Session.Character.Group.Type == GroupType.Group)
                {
                    if (targetSession.Character.Group.Count == 1 ||
                        targetSession.Character?.Group.Type == GroupType.Group)
                    {
                        Session.SendPacket(new InfoPacket
                        {
                            Message = Language.Instance.GetMessageFromKey(LanguageKey.GROUP_INVITE,
                                                                          Session.Account.Language)
                        });
                        targetSession.SendPacket(new DlgPacket
                        {
                            Question = Language.Instance.GetMessageFromKey(LanguageKey.INVITED_YOU_GROUP,
                                                                           targetSession.Account.Language),
                            YesPacket = new PjoinPacket
                            {
                                CharacterId = Session.Character.CharacterId, RequestType = GroupRequestType.Accepted
                            },
                            NoPacket = new PjoinPacket
                            {
                                CharacterId = Session.Character.CharacterId, RequestType = GroupRequestType.Declined
                            }
                        });
                    }
                }

                break;

            case GroupRequestType.Sharing:

                if (Session.Character.Group.Count == 1)
                {
                    return;
                }

                Session.SendPacket(new InfoPacket
                {
                    Message = Language.Instance.GetMessageFromKey(LanguageKey.GROUP_SHARE_INFO,
                                                                  Session.Account.Language)
                });

                Session.Character.Group.Values.Where(s => s.Item2.VisualId != Session.Character.CharacterId)
                .ToList().ForEach(s =>
                {
                    var session =
                        ServerManager.Instance.Sessions.Values.FirstOrDefault(v =>
                                                                              v.Character.CharacterId == s.Item2.VisualId);

                    if (session == null)
                    {
                        return;
                    }

                    session.Character.GroupRequestCharacterIds.Add(s.Item2.VisualId);
                    session.SendPacket(new DlgPacket
                    {
                        Question = Language.Instance.GetMessageFromKey(LanguageKey.INVITED_GROUP_SHARE,
                                                                       Session.Account.Language),
                        YesPacket = new PjoinPacket
                        {
                            CharacterId = Session.Character.CharacterId,
                            RequestType = GroupRequestType.AcceptedShare
                        },
                        NoPacket = new PjoinPacket
                        {
                            CharacterId = Session.Character.CharacterId,
                            RequestType = GroupRequestType.DeclinedShare
                        }
                    });
                });

                break;

            case GroupRequestType.Accepted:
                if (!targetSession.Character.GroupRequestCharacterIds.Contains(Session.Character.CharacterId))
                {
                    return;
                }

                targetSession.Character.GroupRequestCharacterIds.Remove(Session.Character.CharacterId);

                if (Session.Character.Group.Count > 1 && targetSession.Character.Group.Count > 1)
                {
                    return;
                }

                if (Session.Character.Group.IsGroupFull || targetSession.Character.Group.IsGroupFull)
                {
                    Session.SendPacket(new InfoPacket
                    {
                        Message = Language.Instance.GetMessageFromKey(LanguageKey.GROUP_FULL,
                                                                      Session.Account.Language)
                    });

                    targetSession.SendPacket(new InfoPacket
                    {
                        Message = Language.Instance.GetMessageFromKey(LanguageKey.GROUP_FULL,
                                                                      targetSession.Account.Language)
                    });
                    return;
                }

                if (Session.Character.Group.Count > 1)
                {
                    targetSession.Character.JoinGroup(Session.Character.Group);
                    targetSession.SendPacket(new InfoPacket
                    {
                        Message = Language.Instance.GetMessageFromKey(LanguageKey.JOINED_GROUP,
                                                                      targetSession.Account.Language)
                    });
                }
                else if (targetSession.Character.Group.Count > 1)
                {
                    if (targetSession.Character.Group.Type == GroupType.Group)
                    {
                        Session.Character.JoinGroup(targetSession.Character.Group);
                    }
                }
                else
                {
                    Session.Character.Group.GroupId = ServerManager.Instance.GetNextGroupId();
                    targetSession.Character.JoinGroup(Session.Character.Group);
                    Session.SendPacket(new InfoPacket
                    {
                        Message = Language.Instance.GetMessageFromKey(LanguageKey.JOINED_GROUP,
                                                                      Session.Account.Language)
                    });

                    targetSession.SendPacket(new InfoPacket
                    {
                        Message = Language.Instance.GetMessageFromKey(LanguageKey.GROUP_ADMIN,
                                                                      targetSession.Account.Language)
                    });

                    targetSession.Character.Group = Session.Character.Group;
                    Session.Character.GroupRequestCharacterIds.Clear();
                    targetSession.Character.GroupRequestCharacterIds.Clear();
                }

                if (Session.Character.Group.Type != GroupType.Group)
                {
                    return;
                }

                var currentGroup = Session.Character.Group;

                foreach (var member in currentGroup.Values.Where(s => s.Item2 is ICharacterEntity))
                {
                    var session =
                        ServerManager.Instance.Sessions.Values.FirstOrDefault(s =>
                                                                              s.Character.CharacterId == member.Item2.VisualId);
                    session?.SendPacket(currentGroup.GeneratePinit());
                    session?.SendPackets(currentGroup.GeneratePst());
                }

                ServerManager.Instance.Groups[currentGroup.GroupId] = currentGroup;
                Session.Character.MapInstance?.Broadcast(Session.Character.Group.GeneratePidx(Session.Character));

                break;

            case GroupRequestType.Declined:
                if (!targetSession.Character.GroupRequestCharacterIds.Contains(Session.Character.CharacterId))
                {
                    return;
                }

                targetSession.Character.GroupRequestCharacterIds.Remove(Session.Character.CharacterId);
                targetSession.SendPacket(new InfoPacket
                {
                    Message = Language.Instance.GetMessageFromKey(LanguageKey.GROUP_REFUSED,
                                                                  targetSession.Account.Language)
                });
                break;

            case GroupRequestType.AcceptedShare:
                if (!targetSession.Character.GroupRequestCharacterIds.Contains(Session.Character.CharacterId))
                {
                    return;
                }

                if (Session.Character.Group.Count == 1)
                {
                    return;
                }

                targetSession.Character.GroupRequestCharacterIds.Remove(Session.Character.CharacterId);
                Session.SendPacket(new MsgPacket
                {
                    Message = Language.Instance.GetMessageFromKey(LanguageKey.ACCEPTED_SHARE,
                                                                  Session.Account.Language),
                    Type = MessageType.Whisper
                });

                //TODO: add a way to change respawn points when system will be done
                break;

            case GroupRequestType.DeclinedShare:
                if (!targetSession.Character.GroupRequestCharacterIds.Contains(Session.Character.CharacterId))
                {
                    return;
                }

                targetSession.Character.GroupRequestCharacterIds.Remove(Session.Character.CharacterId);
                targetSession.SendPacket(new InfoPacket
                {
                    Message = Language.Instance.GetMessageFromKey(LanguageKey.SHARED_REFUSED,
                                                                  targetSession.Account.Language)
                });
                break;
            }
        }