public static void ChannelPrevious(byte[] packet, SocketClient sockstate)
 {
     List<Structures.Mobile> Characters = Database.CharacterList(sockstate.Account.AID);
     sockstate.Account.Characters = Characters;
     SMSG_CHARACTER_LIST charlistPkt = new SMSG_CHARACTER_LIST(Characters);
     sockstate.Client.PacketQueue.Enqueue(charlistPkt.Stream);
 }
        public static void Login(byte[] packet, SocketClient sockstate)
        {
            String Username;
            String Password;

            CMSG_ACCOUNT_LOGIN cpkt = (CMSG_ACCOUNT_LOGIN)packet;
            Username = cpkt.Username;
            Password = cpkt.Password;

            Regex countPattern = new Regex("NHN_P_LOGIN=(.+);");
            Match m1 = countPattern.Match(Password);
            Password = m1.Groups[1].ToString();

            // authenticate
            SMSG_ACCOUNT_LOGIN accPkt = Database.Login(Username, Password, sockstate);
            sockstate.Account.Username = Username;
            sockstate.Client.PacketQueue.Enqueue(accPkt.Stream);

            if (accPkt.LoginSuccess == true)
            {
                Logger.Log(Logger.LogLevel.Access, "Authentication", "Login accepted for user : {0} ", sockstate.Account.Username);

                // send login options
                SMSG_ACCOUNT_OPTIONS optionsPkt = new SMSG_ACCOUNT_OPTIONS();
                optionsPkt.CharSlot = sockstate.Account.Options;
                optionsPkt.CharUnlock = sockstate.Account.Options;
                sockstate.Client.PacketQueue.Enqueue(optionsPkt.Stream);

                // send character list
                List<Structures.Mobile> Characters = Database.CharacterList(sockstate.Account.AID);
                sockstate.Account.Characters = Characters;
                SMSG_CHARACTER_LIST charlistPkt = new SMSG_CHARACTER_LIST(Characters);
                sockstate.Client.PacketQueue.Enqueue(charlistPkt.Stream);
            }
        }