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