public static void HandleGameChallengeAccept(object packet, Session session)
        {
            var gameChallangeAccept = (PacketGameChallengeAccept)packet;

            Session opponentSession = WorldManager.GetPlayerSession(gameChallangeAccept.ProfileId);
            if (opponentSession != null)
            {
                if (BattleManager.Battles.ContainsKey(session.Player.Id))
                    LogManager.Write("Lobby handler", "player {0} wants to play several quickmatches at once ! Not possible !", session.Player.Id);
                else if (BattleManager.Battles.ContainsKey(opponentSession.Player.Id))
                    LogManager.Write("Lobby handler", "player {0} wants to play several quickmatches at once ! Not possible !", opponentSession.Player.Id);
                else
                {
                    // TODO: handle this better
                    /*BattleType[] typesToAbort = new BattleType[3] { BattleType.MP_QUICKMATCH, BattleType.MP_RANKED, BattleType.MP_LIMITED };
                    foreach (BattleType battleType in typesToAbort)
                    {
                        var cancelQueue = new PacketGameMatchQueueStatus()
                        {
                            InQueue = false,
                            GameType = battleType
                        };
                        session.Send(cancelQueue);
                        opponentSession.Send(cancelQueue);
                    }*/

                    PacketGameChallengeResponse gameChallenge = new PacketGameChallengeResponse()
                    {
                        From   = opponentSession.Player.GeneratePacketProfile(),
                        To     = session.Player.GeneratePacketProfile(),
                        Status = "ACCEPT"
                    };

                    opponentSession.Send(gameChallenge);
                    session.SendOkPacket("GameChallengeAccept");

                    Random random = new Random();
                    PlayerColor challengerColor, challengedColor;
                    if (random.Next(2) > 0)
                    {
                        challengerColor = PlayerColor.white;
                        challengedColor = PlayerColor.black;
                    }
                    else
                    {
                        challengedColor = PlayerColor.white;
                        challengerColor = PlayerColor.black;
                    }

                    Battle newBattle = new Battle(BattleType.MP_UNRANKED);
                    BattleSide challengedSide = new BattleSide(session.Player.Id, session.Player.Username, challengedColor);
                    BattleSide challengerSide = new BattleSide(opponentSession.Player.Id, opponentSession.Player.Username, challengerColor);
                    challengedSide.OpponentSide = challengerSide;
                    challengerSide.OpponentSide = challengedSide;
                    newBattle.WhiteSide = challengerColor == PlayerColor.white ? challengerSide : challengedSide;
                    newBattle.BlackSide = challengerColor == PlayerColor.black ? challengerSide : challengedSide;

                    BattleManager.Battles[session.Player.Id] = newBattle;
                    BattleManager.Battles[opponentSession.Player.Id] = newBattle;

                    var battleRedirect = new PacketBattleRedirect()
                    {
                        IP = ((IPEndPoint)session.Socket.LocalEndPoint).Address.ToString(),
                        Port = (uint)ConfigManager.Config.Network.BattlePort
                    };
                    session.Send(battleRedirect);
                    opponentSession.Send(battleRedirect);

                }
            }
        }
        public static void HandleGameChallengeDecline(object packet, Session session)
        {
            var gameChallengeDecline = (PacketGameChallengeDecline)packet;

            var opponentSession = WorldManager.GetPlayerSession(gameChallengeDecline.ProfileId);
            if (opponentSession == null)
            {
                LogManager.Write("Player", "Player {0} tried to decline challange non existant player {1} to a battle!",
                    session.Player.Id, gameChallengeDecline.ProfileId);
            }

            var packetGameChallengeResponse = new PacketGameChallengeResponse()
            {
                From   = opponentSession.Player.GeneratePacketProfile(),
                To     = session.Player.GeneratePacketProfile(),
                Status = "DECLINE"
            };

            opponentSession.Send(packetGameChallengeResponse);
            session.Send(packetGameChallengeResponse);
        }