Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using Past.Protocol;
- using Past.Protocol.IO;
- using Past.Protocol.Messages;
- using Past.Protocol.Types;
- using Past.Utils;
- using System;
- using System.Net.Sockets;
- namespace Past.Network.Login
- {
- public class LoginClient
- {
- private Client Login { get; set; }
- public LoginClient(Client client)
- {
- Login = client;
- Login_OnClientSocketConnected();
- Login.OnClientSocketClosed += Login_OnClientSocketClosed;
- Login.OnClientReceivedData += Login_OnClientReceivedData;
- }
- private void Login_OnClientSocketConnected()
- {
- Send(new ProtocolRequired(1165, 1165));
- Send(new HelloConnectMessage(""));
- }
- private void Login_OnClientSocketClosed()
- {
- LoginServer.Clients.Remove(this);
- Login.Close();
- ConsoleUtils.Write(ConsoleUtils.type.INFO, "Client disconnected from LoginServer ...");
- }
- private void Login_OnClientReceivedData(byte[] data)
- {
- {
- int Header;
- int Id;
- int Size = 0;
- using (BigEndianReader reader = new BigEndianReader(data))
- {
- Header = reader.ReadShort(); //header
- Id = Header >> 2;
- var typeLen = Functions.ComputeTypeLen((uint)data.Length);
- if (typeLen == 1)
- {
- Size = reader.ReadByte();
- }
- else if (typeLen == 2)
- {
- Size = reader.ReadShort();
- }
- else if (typeLen == 3)
- {
- Size = ((reader.ReadByte() & 255) >> 16) + ((reader.ReadByte() & 255) >> 8) + (reader.ReadByte() & 255);
- }
- while (data.Length - 3 <= Size)
- {
- ConsoleUtils.Write(ConsoleUtils.type.RECEIV, "Receiv Packet ID {0} Header {1} Size {2}", Id, Header, Size);
- if (Id == 4) //IdentificationMessage TODO LOGIN SYSTEM
- {
- string login;
- string password;
- bool autoconnect;
- double RemainingSubscriptionTime;
- RemainingSubscriptionTime = 1;
- reader.SkipBytes(4); //version
- login = reader.ReadUTF(); //login
- password = reader.ReadUTF(); //password
- autoconnect = reader.ReadBoolean(); //autoconnect
- ConsoleUtils.Write(ConsoleUtils.type.RECEIV, "login : {0} password : {1} ...", login, password);
- Send(new IdentificationSuccessMessage(true, false, login, 0, "DELETE?", RemainingSubscriptionTime));
- //status 3 = Online, 1 Offline
- Send(new ServersListMessage(new GameServerInformations[] // Liste des serveurs
- {
- new GameServerInformations(111, 3, 0, true, 0),
- new GameServerInformations(104, 3, 0, true, 0),
- new GameServerInformations(124, 3, 0, true, 0),
- }));
- }
- if (Id == 40) //ServerSelectionMessage
- {
- short serverId;
- string ticket;
- ticket = reader.ReadUTF();
- ConsoleUtils.Write(ConsoleUtils.type.INFO, "ticket : {0} ", ticket);
- serverId = reader.ReadShort(); // serverId
- ConsoleUtils.Write(ConsoleUtils.type.RECEIV, "serverId : {0} ...", serverId);
- Send(new SelectedServerDataMessage(serverId, "127.0.0.1", 5555, true, ticket));
- LoginServer.Clients.Remove(this);
- Login.Close();
- }
- if (data.Length - 3 == Size)
- {
- ConsoleUtils.Write(ConsoleUtils.type.RECEIV, "Receiv. Packet ID {0} Header {1} Size {2}", Id, Header, Size);
- return;
- }
- }
- }
- }
- }
- public void Send(NetworkMessage message)
- {
- try
- {
- using (BigEndianWriter writer = new BigEndianWriter())
- {
- message.Pack(writer);
- Login.Send(writer.Data);
- }
- ConsoleUtils.Write(ConsoleUtils.type.SEND, "{0} to client {1}:{2} ...", message.ToString(), Login.Ip, Login.Port);
- }
- catch (Exception ex)
- {
- ConsoleUtils.Write(ConsoleUtils.type.ERROR, ex.ToString());
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement