using System; using System.IO; using System.Net; using System.Reflection; using System.Net.Sockets; using FiestaBot; //using FiestaBot.Login.Handlers; using FiestaBot.Instances.Networking; using FiestaBot.Utilities; namespace FiestaBot.Login.Networking { internal class LoginClient : Client, IDisposable { public FiestaCrypto Crypto; public bool InWorldSelect = false; public LoginClient(IPAddress connectIp, int port) : base(connectIp, port) { Program.LoginClient = this; } public void SendPacket(Packet serverPacket) { if (IsConnected != 0) { return; } serverPacket.ToArray(Crypto, out var packetBuffer); serverPacket.Dispose(); Send(packetBuffer); } public override void Connected() { Receive(); Logger.Log(LogType.Socket, "Succesfully connected to the login server"); } public override void ConnectFailed(SocketException exception) { } public override void Received(byte[] buffer) { var clientPacket = new Packet(buffer); if (!clientPacket.SetHeaderAndType()) { Logger.Log(LogType.Login, "Unable to read packet header/type"); } else if (Program.LoginHandlers.HasHandler(clientPacket.Header, clientPacket.Type)) { Logger.Log(LogType.Login, $"Got packet {clientPacket.Header}:{clientPacket.Type}"); try { var packetMethod = Program.LoginHandlers.GetHandler(clientPacket.Header, clientPacket.Type); var packetAction = Program.LoginHandlers.GetAction(packetMethod, this, clientPacket); packetAction(); } catch { Logger.Log(LogType.Login, "Unknown packet found: {0}:{1}", clientPacket.Header, clientPacket.Type); } } else { Logger.Log(LogType.Login, "Unknown packet: {0}:{1}", clientPacket.Header, clientPacket.Type); } } public override void Disconnected() { Logger.Log(LogType.Socket, "Disconnected from login"); } } }