예제 #1
0
        private static void Handle_AccountInfoReceived(LoginConnection net, PacketReader reader)
        {
            //Set Account Info
            Account account = new Account();
            account.AccountId = reader.ReadInt32();
            account.AccessLevel = reader.ReadByte();
            account.Membership = reader.ReadByte();
            account.Name = reader.ReadDynamicString();
            //account.Password = reader.ReadDynamicString();
            account.Session = reader.ReadInt32();
            account.LastEnteredTime = reader.ReadInt64();
            account.LastIp = reader.ReadDynamicString();

            Console.WriteLine(account.Session);
            if (ClientConnection.CurrentAccounts.ContainsKey(account.Session))
            {
                //Already
                Account acc = ClientConnection.CurrentAccounts[account.Session];
                if (acc.Connection != null)
                {
                    acc.Connection.Dispose(); //Disconenct
                    Logger.Trace("Account " + acc.Name + " Was Forcibly Disconnected");
                }
                else
                {
                    ClientConnection.CurrentAccounts.Remove(account.Session);
                }
            }
            else
            {
                Logger.Trace("Account {0}: Authorized", account.Name);
                ClientConnection.CurrentAccounts.Add(account.Session, account);
            }
        }
예제 #2
0
 public override void HandleReceived(byte[] data)
 {
     PacketReader reader = new PacketReader(data, 0);
     short opcode = reader.ReadInt16();
     PacketHandler<LoginConnection> handler = DelegateList.LHandlers[opcode];
     if (handler != null)
         handler.OnReceive(this, reader);
     else
         Logger.Trace("Received Undefined Packet 0x{0:x2", opcode);
 }
예제 #3
0
파일: PacketList.cs 프로젝트: ExpTeam/trunk
        private static void Handle_RegisterGameServer(GameConnection net, PacketReader reader)
        {
            byte id = reader.ReadByte();
            short port = reader.ReadInt16();

            string ip = reader.ReadDynamicString();
            string password = reader.ReadDynamicString();

            bool success = GameServerController.RegisterGameServer(id, password, net, port, ip);
            net.SendAsync(new NET_GameRegistrationResult(success));
        }
예제 #4
0
 public override void HandleReceived(byte[] data)
 {
     PacketReader reader = new PacketReader(data, 0);
     short opcode = reader.ReadInt16();
     PacketHandler<GameConnection> handler = PacketList.GHandlers[opcode];
     if (handler != null) {
         handler.OnReceive(this, reader);
     }
     else
         Logger.Trace("Received Undefined GameServer Packet 0x{0:X2}", opcode);
     reader = null;
 }
예제 #5
0
 public static void OnPacketReceive_ClientAuthorized(ClientConnection net, PacketReader reader)
 {
     //B3 04 00 00 B3 04 00 00 8C 28 22 00 E7 F0 0C C6 FF FF FF FF 00
     long protocol = reader.ReadLEInt64(); //Protocols?
     int sessionId = reader.ReadLEInt32(); //User Session Id
     int accountId = reader.ReadLEInt32(); //Account Id
     Account m_Authorized = ClientConnection.CurrentAccounts.FirstOrDefault(kv => kv.Value.Session == sessionId && kv.Value.AccountId == accountId).Value;
     if (m_Authorized == null)
     {
         net.Dispose();
         Logger.Trace("Client {0} Disposed : Unable To Play.", net);
     }
     else
     {
         net.CurrentAccount = m_Authorized;
         net.SendAsync(new NP_ClientConnected());
     }
 }
예제 #6
0
        public override void HandleReceived(byte[] data)
        {
            PacketReader reader = new PacketReader(data, 0);
            reader.Offset += 1; //Undefined Random Byte
            byte level = reader.ReadByte(); //Packet Level
            short opcode = reader.ReadLEInt16(); //Packet Opcode

            if (!DelegateList.ClientHandlers.ContainsKey(level))
            {
                Logger.Trace("Received Undefined Level {0} - Opcode 0x{1:X2}", level, opcode);
                return;
            }

            PacketHandler<ClientConnection> handler = DelegateList.ClientHandlers[level][opcode];
            if (handler != null)
                handler.OnReceive(this, reader);
            else
                Logger.Trace("Received Undefined Packet Level - {0} Op - 0x{1:X2}", level, opcode);
        }
예제 #7
0
        public override void HandleReceived(byte[] data)
        {
            PacketReader reader = new PacketReader(data, 0);
            short opcode = reader.ReadLEInt16();
            if (opcode > PacketList.LHandlers.Length)
            {
                Logger.Trace("Not Enough Lenght For LHandlers, Disposing...");
                Dispose();
                return;
            }

            PacketHandler<ArcheAgeConnection> handler = PacketList.LHandlers[opcode];
            if (handler != null)
                handler.OnReceive(this, reader);
            else
                Logger.Trace("Received Undefined Packet 0x{0:x2}", opcode);

            reader = null;
        }
예제 #8
0
파일: PacketList.cs 프로젝트: ExpTeam/trunk
 private static void Handle_ServerSelected(ArcheAgeConnection net, PacketReader reader)
 {
     reader.Offset += 8; //00 00 00 00 00 00 00 00  Undefined Data
     byte serverId = reader.ReadByte();
     GameServer server = GameServerController.CurrentGameServers.FirstOrDefault(n => n.Value.Id == serverId).Value;
     if (server.CurrentConnection != null)
     {
         if (GameServerController.AuthorizedAccounts.ContainsKey(net.CurrentAccount.AccountId))
         {
             net.movedToGame = true;
             GameServerController.AuthorizedAccounts.Remove(net.CurrentAccount.AccountId);
             server.CurrentConnection.SendAsync(new NET_AccountInfo(net.CurrentAccount));
             net.SendAsync(new NP_SendGameAuthorization(server, net.CurrentAccount.AccountId));
             server.CurrentAuthorized.Add(net.CurrentAccount.AccountId);
         }
     }
     else
         net.Dispose();
 }
예제 #9
0
 private static void Handle_GameRegisterResult(LoginConnection con, PacketReader reader)
 {
     bool result = reader.ReadBoolean();
     if (result)
         Logger.Trace("Login Server Successfully Installed");
     else
         Logger.Trace("Some Problems are Appear while Installing Login Server");
     if(result)
        m_CurrentLoginServer = con;
 }
예제 #10
0
        /// <summary>
        /// Reading Length And Handles Data By [HandleReceived(byte[])] Without Length.
        /// </summary>
        /// <param name="e"></param>
        private void ProceedReceiving(SocketAsyncEventArgs e)
        {
            int transfered = e.BytesTransferred;
            if (e.SocketError != SocketError.Success || transfered <= 0)
            {
                if (DisconnectedEvent != null)
                    DisconnectedEvent(this, EventArgs.Empty);
                return;
            }

            #if DEBUG
            //--- Console Hexadecimal
            StringBuilder builder = new StringBuilder();
            builder.Append("\n");
            for (int i = 0; i < transfered; i++)
                builder.AppendFormat("{0:x2} ".ToUpper(), m_RecvBuffer[i]);

            Logger.Trace(builder.ToString());
            //--- Console Hexadecimal
            #endif

            PacketReader reader = new PacketReader(m_RecvBuffer, 0);
            short length = m_LittleEndian ? reader.ReadLEInt16() : reader.ReadInt16();

            byte[] data = new byte[length];
            Buffer.BlockCopy(m_RecvBuffer, 2, data, 0, length);
            HandleReceived(data);
            reader = null;
        }
예제 #11
0
파일: PacketList.cs 프로젝트: ExpTeam/trunk
        private static void Handle_SignIn(ArcheAgeConnection net, PacketReader reader)
        {
            reader.Offset += 10; //Static Data - 0A 00 00 00 07 00 00 00 00 00

            string m_RLogin = reader.ReadStringSafe(reader.ReadLEInt16()); //Reading Login

            Account n_Current = AccountHolder.AccountList.FirstOrDefault(n => n.Name == m_RLogin);
            if (n_Current == null)
            {
                //Make New Temporary
                if (Settings.Default.Account_AutoCreation)
                {
                    Account m_New = new Account();
                    m_New.AccountId = AccountHolder.AccountList.Count + 1;
                    m_New.LastEnteredTime = Utility.CurrentTimeMilliseconds();
                    m_New.AccessLevel = 0;
                    m_New.LastIp = net.ToString();
                    m_New.Membership = 0;
                    m_New.Name = m_RLogin;
                    net.CurrentAccount = m_New;
                    AccountHolder.AccountList.Add(m_New);
                }
                else
                    net.CurrentAccount = null;
            }
            else
            {
                net.CurrentAccount = n_Current;
            }
            net.SendAsync(new NP_AcceptLogin());
            net.SendAsync(new NP_AESKey());
        }
예제 #12
0
파일: PacketList.cs 프로젝트: ExpTeam/trunk
 private static void Handle_RequestServerList(ArcheAgeConnection net, PacketReader reader)
 {
     byte[] unknown = reader.ReadByteArray(8); //unk?
     net.SendAsync(new NP_ServerList());
 }
예제 #13
0
파일: PacketList.cs 프로젝트: ExpTeam/trunk
        private static void Handle_UpdateCharacters(GameConnection net, PacketReader reader)
        {
            int accountId = reader.ReadInt32();
            int characters = reader.ReadInt32();

            Account currentAc = AccountHolder.AccountList.FirstOrDefault(n => n.AccountId == accountId);
            currentAc.Characters = characters;
        }
예제 #14
0
파일: PacketList.cs 프로젝트: ExpTeam/trunk
        private static void Handle_SignIn_Continue(ArcheAgeConnection net, PacketReader reader)
        {
            //HOW TO DECRYPT IT ????
            string password = "";
            if (net.CurrentAccount == null)
            {
                net.SendAsync(new NP_FailLogin());
                return;
            }

            /* TODO
            if (net.CurrentAccount.Password == null)
            {
                //Means - New Account.
                net.CurrentAccount.Password = password;
            }
            else
            {
                //Checking Password
                if (net.CurrentAccount.Password != password)
                {
                    net.SendAsync(new NP_FailLogin());
                    return;
                }
            }
            */

            net.CurrentAccount.Session = net.GetHashCode();
            net.SendAsync(new NP_PasswordCorrect(net.CurrentAccount.Session));
            Logger.Trace("Account Logged In: " + net.CurrentAccount.Name);
            GameServerController.AuthorizedAccounts.Add(net.CurrentAccount.AccountId, net.CurrentAccount);
        }