Advertisement
Guest User

LoginClient.cs

a guest
Jul 1st, 2016
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 5.17 KB | None | 0 0
  1. using Past.Protocol;
  2. using Past.Protocol.IO;
  3. using Past.Protocol.Messages;
  4. using Past.Protocol.Types;
  5. using Past.Utils;
  6. using System;
  7. using System.Net.Sockets;
  8.  
  9. namespace Past.Network.Login
  10. {
  11.     public class LoginClient
  12.     {
  13.         private Client Login { get; set; }
  14.  
  15.         public LoginClient(Client client)
  16.         {
  17.             Login = client;
  18.             Login_OnClientSocketConnected();
  19.             Login.OnClientSocketClosed += Login_OnClientSocketClosed;
  20.             Login.OnClientReceivedData += Login_OnClientReceivedData;
  21.         }
  22.  
  23.         private void Login_OnClientSocketConnected()
  24.         {
  25.             Send(new ProtocolRequired(1165, 1165));
  26.             Send(new HelloConnectMessage(""));
  27.         }
  28.  
  29.         private void Login_OnClientSocketClosed()
  30.         {
  31.             LoginServer.Clients.Remove(this);
  32.             Login.Close();
  33.             ConsoleUtils.Write(ConsoleUtils.type.INFO, "Client disconnected from LoginServer ...");
  34.         }
  35.  
  36.         private void Login_OnClientReceivedData(byte[] data)
  37.         {
  38.             {
  39.                 int Header;
  40.                 int Id;
  41.                 int Size = 0;
  42.  
  43.                 using (BigEndianReader reader = new BigEndianReader(data))
  44.                 {
  45.                     Header = reader.ReadShort(); //header
  46.                     Id = Header >> 2;
  47.                     var typeLen = Functions.ComputeTypeLen((uint)data.Length);
  48.                     if (typeLen == 1)
  49.                     {
  50.                         Size = reader.ReadByte();
  51.                     }
  52.                     else if (typeLen == 2)
  53.                     {
  54.                         Size = reader.ReadShort();
  55.                     }
  56.                     else if (typeLen == 3)
  57.                     {
  58.                         Size = ((reader.ReadByte() & 255) >> 16) + ((reader.ReadByte() & 255) >> 8) + (reader.ReadByte() & 255);
  59.                     }
  60.  
  61.                     while (data.Length - 3 <= Size)
  62.                     {
  63.                         ConsoleUtils.Write(ConsoleUtils.type.RECEIV, "Receiv Packet ID {0} Header {1} Size {2}", Id, Header, Size);
  64.                         if (Id == 4) //IdentificationMessage TODO LOGIN SYSTEM
  65.                         {
  66.                             string login;
  67.                             string password;
  68.                             bool autoconnect;
  69.                             double RemainingSubscriptionTime;
  70.                             RemainingSubscriptionTime = 1;
  71.                             reader.SkipBytes(4); //version
  72.                             login = reader.ReadUTF(); //login
  73.                             password = reader.ReadUTF(); //password
  74.                             autoconnect = reader.ReadBoolean(); //autoconnect
  75.                             ConsoleUtils.Write(ConsoleUtils.type.RECEIV, "login : {0} password : {1} ...", login, password);
  76.                             Send(new IdentificationSuccessMessage(true, false, login, 0, "DELETE?", RemainingSubscriptionTime));
  77.                             //status 3 = Online, 1 Offline
  78.                             Send(new ServersListMessage(new GameServerInformations[] // Liste des serveurs
  79.                         {
  80.                             new GameServerInformations(111, 3, 0, true, 0),
  81.                             new GameServerInformations(104, 3, 0, true, 0),
  82.                             new GameServerInformations(124, 3, 0, true, 0),
  83.                         }));
  84.                         }
  85.                            
  86.                         if (Id == 40) //ServerSelectionMessage
  87.                         {
  88.                             short serverId;
  89.                             string ticket;
  90.                             ticket = reader.ReadUTF();
  91.                             ConsoleUtils.Write(ConsoleUtils.type.INFO, "ticket : {0} ", ticket);
  92.                             serverId = reader.ReadShort(); // serverId
  93.                             ConsoleUtils.Write(ConsoleUtils.type.RECEIV, "serverId : {0} ...", serverId);
  94.                             Send(new SelectedServerDataMessage(serverId, "127.0.0.1", 5555, true, ticket));
  95.                             LoginServer.Clients.Remove(this);
  96.                             Login.Close();
  97.                         }
  98.                         if (data.Length - 3 == Size)
  99.                         {
  100.                             ConsoleUtils.Write(ConsoleUtils.type.RECEIV, "Receiv. Packet ID {0} Header {1} Size {2}", Id, Header, Size);
  101.                             return;
  102.                         }
  103.                     }
  104.                 }
  105.             }
  106.         }
  107.                        
  108.  
  109.         public void Send(NetworkMessage message)
  110.         {
  111.             try
  112.             {
  113.                 using (BigEndianWriter writer = new BigEndianWriter())
  114.                 {
  115.                     message.Pack(writer);
  116.                     Login.Send(writer.Data);
  117.                 }
  118.                 ConsoleUtils.Write(ConsoleUtils.type.SEND, "{0} to client {1}:{2} ...", message.ToString(), Login.Ip, Login.Port);
  119.             }
  120.             catch (Exception ex)
  121.             {
  122.                 ConsoleUtils.Write(ConsoleUtils.type.ERROR, ex.ToString());
  123.             }
  124.         }
  125.     }
  126. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement