using Filter; using Filter.Handlers.Instances; using Filter.Handlers.Login; using Filter.Networking.Instances; using System; using System.Net; using System.Net.Sockets; using System.Reflection; namespace Filter.Networking.Login { internal class LoginServer : Filter.Networking.Instances.Client, IDisposable { public LoginClient Client; public FiestaCrypto Crypto; public LoginServer(LoginClient TransferClient) : base(IPAddress.Parse("127.0.0.1"), 9050) { this.Client = TransferClient; } public override void Connected() { base.Receive(); } public override void ConnectFailed(SocketException Exception) { base.Disconnect(); this.Client.Disconnect(); } public override void Disconnected() { this.Client.Disconnect(); } public override void Received(byte[] Buffer) { if (this.IsConnected != 0) { return; } Packet packet = new Packet(Buffer); if (!packet.SetHeaderAndType()) { base.Disconnect(); return; } if (!Program.LoginHandlers.HasHandler(packet.Header, packet.Type)) { this.Client.SendPacket(packet); } else { try { MethodInfo handler = Program.LoginHandlers.GetHandler(packet.Header, packet.Type); LoginHandlerLoader loginHandlers = Program.LoginHandlers; object[] objArray = new object[] { this, packet }; loginHandlers.GetAction(handler, objArray)(); } catch (Exception exception1) { Exception exception = exception1; this.SendPacket(packet); Program.WriteError(exception); } } } public void SendPacket(Packet ClientPacket) { byte[] numArray; if (this.IsConnected != 0) { return; } ClientPacket.ToArray(this.Crypto, out numArray); base.Send(numArray); } } }