diff --git a/ClassicalSharp/Network/NetworkProcessor.cs b/ClassicalSharp/Network/NetworkProcessor.cs index 7c17d87a0..2b700fa17 100644 --- a/ClassicalSharp/Network/NetworkProcessor.cs +++ b/ClassicalSharp/Network/NetworkProcessor.cs @@ -43,9 +43,8 @@ namespace ClassicalSharp.Network { return; } - NetworkStream stream = new NetworkStream( socket, true ); - reader = new NetReader( stream ); - writer = new NetWriter( stream ); + reader = new NetReader( socket ); + writer = new NetWriter( socket ); gzippedMap = new FixedBufferStream( reader.buffer ); Disconnected = false; diff --git a/ClassicalSharp/Network/Utils/NetReader.cs b/ClassicalSharp/Network/Utils/NetReader.cs index ec342e5c9..27fcac8e2 100644 --- a/ClassicalSharp/Network/Utils/NetReader.cs +++ b/ClassicalSharp/Network/Utils/NetReader.cs @@ -8,25 +8,25 @@ namespace ClassicalSharp.Network { public byte[] buffer = new byte[4096 * 5]; public int index = 0, size = 0; - public NetworkStream Stream; + Socket socket; - public NetReader( NetworkStream stream ) { - Stream = stream; + public NetReader( Socket socket ) { + this.socket = socket; } public void ReadPendingData() { - if( !Stream.DataAvailable ) return; + if( socket.Available == 0 ) return; // NOTE: Always using a read call that is a multiple of 4096 // (appears to?) improve read performance. - int received = Stream.Read( buffer, size, 4096 * 4 ); - size += received; + int recv = socket.Receive( buffer, size, 4096 * 4, SocketFlags.None ); + size += recv; } public void Skip( int byteCount ) { index += byteCount; } - public void RemoveProcessed() { + public void RemoveProcessed() { size -= index; if( size > 0 ) // only copy left over bytes Buffer.BlockCopy( buffer, index, buffer, 0, size ); diff --git a/ClassicalSharp/Network/Utils/NetWriter.cs b/ClassicalSharp/Network/Utils/NetWriter.cs index 9c5e7519e..f1280b9db 100644 --- a/ClassicalSharp/Network/Utils/NetWriter.cs +++ b/ClassicalSharp/Network/Utils/NetWriter.cs @@ -8,10 +8,10 @@ namespace ClassicalSharp.Network { public byte[] buffer = new byte[131]; public int index = 0; - public NetworkStream Stream; + Socket socket; - public NetWriter( NetworkStream stream ) { - Stream = stream; + public NetWriter( Socket socket ) { + this.socket = socket; } public void WriteString( string value ) { @@ -54,7 +54,9 @@ namespace ClassicalSharp.Network { } public void Send() { - Stream.Write( buffer, 0, index ); + int offset = 0; + while( offset < index ) + offset += socket.Send( buffer, offset, index - offset, SocketFlags.None ); index = 0; } }