2016-09-15 12:02:19 +10:00

63 lines
1.7 KiB
C#

// ClassicalSharp copyright 2014-2016 UnknownShadow200 | Licensed under MIT
using System;
using System.Net.Sockets;
namespace ClassicalSharp.Network {
public class NetWriter {
public byte[] buffer = new byte[131];
public int index = 0;
Socket socket;
public NetWriter( Socket socket ) {
this.socket = socket;
}
public void WriteString( string value ) {
int count = Math.Min( value.Length, Utils.StringLength );
for( int i = 0; i < count; i++ ) {
char c = value[i];
int cpIndex = 0;
if( c == '&' ) {
buffer[index + i] = (byte)'%'; // escape colour codes
} else if( c >= ' ' && c <= '~' ) {
buffer[index + i] = (byte)c;
} else if( (cpIndex = Utils.ControlCharReplacements.IndexOf( c ) ) >= 0 ) {
buffer[index + i] = (byte)cpIndex;
} else if( (cpIndex = Utils.ExtendedCharReplacements.IndexOf( c ) ) >= 0 ) {
buffer[index + i] = (byte)(cpIndex + 127);
} else {
buffer[index + i] = (byte)'?';
}
}
for( int i = value.Length; i < Utils.StringLength; i++ )
buffer[index + i] = (byte)' ';
index += Utils.StringLength;
}
public void WriteUInt8( byte value ) {
buffer[index++] = value;
}
public void WriteInt16( short value ) {
buffer[index++] = (byte)(value >> 8);
buffer[index++] = (byte)(value );
}
public void WriteInt32( int value ) {
buffer[index++] = (byte)(value >> 24);
buffer[index++] = (byte)(value >> 16);
buffer[index++] = (byte)(value >> 8);
buffer[index++] = (byte)(value);
}
public void Send() {
int offset = 0;
while( offset < index )
offset += socket.Send( buffer, offset, index - offset, SocketFlags.None );
index = 0;
}
}
}