using Filter; using Filter.Handlers.Instances; using Filter.Handlers.IRC; using Filter.Networking.Instances; using System; using System.Net; using System.Net.Sockets; using System.Reflection; namespace Filter.Networking.IRC { internal class IRCServer : Client, IDisposable { public FiestaCrypto Crypto; public IRCServer(string ConnectIP) : base(IPAddress.Parse(ConnectIP), 8970) { } public override void Connected() { base.Receive(); } public override void ConnectFailed(SocketException Exception) { base.Disconnect(); } public override void Disconnected() { } public override void Received(byte[] Buffer) { if (this.IsConnected != 0) { return; } Packet packet = new Packet(Buffer); if (!packet.SetHeaderAndType()) { base.Disconnect(); return; } if (!Program.IRCHandlers.HasHandler(packet.Header, packet.Type)) { base.Disconnect(); } else { try { MethodInfo handler = Program.IRCHandlers.GetHandler(packet.Header, packet.Type); IRCHandlerLoader rCHandlers = Program.IRCHandlers; object[] objArray = new object[] { this, packet }; rCHandlers.GetAction(handler, objArray)(); } catch (Exception exception) { base.Disconnect(); } } } public void SendPacket(Packet ClientPacket) { byte[] numArray; if (this.IsConnected != 0) { return; } ClientPacket.ToArray(this.Crypto, out numArray); base.Send(numArray); } } }