using System.Net.Sockets; using DX86.Modules; namespace DX86; using System.Net.Sockets; public abstract class UdpServer { private string address; private int port; protected MessageSender ms; private DX86 dx86; public UdpServer(string address, int port, MessageSender ms) { ms.Log("[DX86] Setting up server."); this.address = address; this.port = port; this.ms = ms; this.dx86 = new DX86(ms, ServerType.UDP); ms.Log("[DX86] Server Setup Complete."); _ = RunServer(); } private async Task RunServer() { ms.Log("[DX86] Starting server."); // Subscribe to events dx86.ClientConnected += ClientConnectEvent; dx86.MessageReceived += MessageReceivedEvent; dx86.ClientDisconnected += ClientDisconnectEvent; // Start the server dx86.StartServer(address, port); ms.Log("[DX86] Server started."); // Keep the server running indefinitely await Task.Delay(Timeout.Infinite); } public void StopServer() { ms.Log("[DX86] Got Signal to Stop Server."); dx86.StopServer(); ms.Log("[DX86] Server stopped."); } public string GetAddress() { return address; } public int GetPort() { return port; } public void SendMessageAsync(TcpClient client, string message) { dx86.SendMessageAsync(client, message); } // Define your event handlers protected abstract void ClientConnectEvent(TcpClient client); protected abstract void MessageReceivedEvent(TcpClient client, string message); protected abstract void ClientDisconnectEvent(TcpClient client); }