Use raw socket receive/send instead of NetworkStream.

This commit is contained in:
UnknownShadow200 2016-08-15 13:18:46 +10:00
parent ff4b1eb723
commit 0936dd7e50
3 changed files with 15 additions and 14 deletions

View File

@ -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;

View File

@ -8,18 +8,18 @@ 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 ) {

View File

@ -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;
}
}