using System; using System.Net; using System.Net.Sockets; using System.Threading; using System.Threading.Tasks; //IP Range Updater namespace Mistox.Client { public class mTCPClient : IDisposable { TcpClient Server; public mTCPClient( IPEndPoint ServerAddress ) { Server = new TcpClient( AddressFamily.InterNetwork ); Server.NoDelay = true; Server.Connect( ServerAddress ); ClientInterface.ServerClientInstance.InvokeOnServerConnected(); Thread RThread = new Thread(async () => { await ReceiveThread(); }); RThread.Start(); } async Task ReceiveThread() { using( NetworkStream ns = Server.GetStream() ) { try { while( ClientInterface.ServerClientInstance.Alive ) { byte[] StreamData = new byte[1024]; int bytesRead = await ns.ReadAsync(StreamData, 0, StreamData.Length); if( bytesRead > 0 ) { dynamic data = Serializer.tReceive( StreamData.Sub( 0, bytesRead ) ); if( data != null ) { ClientInterface.ServerClientInstance.InvokeOnReceived( data ); } } } } catch( Exception e ) { Console.WriteLine( "TCP Receive exception : " + e.Message ); } } } public async Task Send(T packet) { byte[] data = DataPacket.Serialize( packet ); await Server.GetStream().WriteAsync( data, 0, data.Length ); } public void Dispose() { ClientInterface.ServerClientInstance.InvokeOnServerDisconnected(); Server.Close(); Server = null; } } }