using Filter; using Filter.Handlers.Instances; using Filter.Handlers.Manager; using Filter.Networking.Instances; using System; using System.Net; using System.Net.Sockets; using System.Reflection; namespace Filter.Networking.Manager { internal class ManagerServer : Filter.Networking.Instances.Client { public ManagerClient Client; public FiestaCrypto Crypto; public ManagerServer(ManagerClient TransferClient) : base(IPAddress.Parse("127.0.0.1"), 9210) { 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) { Packet packet = new Packet(Buffer); if (!packet.SetHeaderAndType()) { base.Disconnect(); return; } if (!Program.ManagerHandlers.HasHandler(packet.Header, packet.Type)) { this.Client.SendPacket(packet); } else { try { MethodInfo handler = Program.ManagerHandlers.GetHandler(packet.Header, packet.Type); ManagerHandlerLoader managerHandlers = Program.ManagerHandlers; object[] objArray = new object[] { this, packet }; managerHandlers.GetAction(handler, objArray)(); } catch (Exception exception1) { Exception exception = exception1; this.SendPacket(packet); Program.WriteError(exception); } } } public void SendPacket(Packet ClientPacket) { byte[] numArray; ClientPacket.ToArray(this.Crypto, out numArray); base.Send(numArray); } } }