using System; using System.Net; using System.Threading.Tasks; using Mistox.Client; namespace Mistox { public class ClientInterface { public static MistoxClient serverInstance; public event Action onServerConnected; public event Action onUserConnected; public event Action onDataReceived; public event Action onUserDisconnected; public event Action onServerDisconnected; public ClientInterface( string UserName, string ConnectionKey, string IpOrHostName, int Port ) { // Get Server IP IPHostEntry host = Dns.GetHostEntry( IpOrHostName ); IPEndPoint ServerDenstination = new IPEndPoint(0, 0); foreach( IPAddress entry in host.AddressList ) { if ( entry.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork ) { ServerDenstination = new IPEndPoint( entry, Port ); } } // Start and wire up the Mistox server client serverInstance = new MistoxClient( UserName, ConnectionKey, ServerDenstination ); serverInstance.onServerConnected += onServerConnected; serverInstance.onUserConnected += (mUDPClient endpoint) => { onUserConnected?.Invoke(endpoint); }; serverInstance.onDataReceived += (dynamic data) => { onDataReceived?.Invoke(data); }; serverInstance.onUserDisconnected += (mUDPClient endpoint) => { onUserDisconnected?.Invoke(endpoint); }; serverInstance.onServerDisconnected += onServerDisconnected; } public async Task SendAllClients(Packet data) { foreach( mUDPClient cur in serverInstance.clientConnections.Values ){ await cur.Send( data ); } } public async Task SendClient(string UserName, Packet data) { foreach( mUDPClient cur in serverInstance.clientConnections.Values ) { if (cur.UserName.ToLower() == UserName.ToLower()) { await cur.Send( data ); break; } } } public async Task SendServer(Packet data) { await serverInstance.ServerConnection.Send( data ); } } }