My favorites | Sign in
Project Logo
                
Search
for
Updated Jun 10, 2007 by lidgren
Labels: Featured
MessageCompression  

Message compression example

public class Car
{
	private string m_driverName;
	private bool m_occupied;
	private float m_throttle;
	private uint m_gear;
	private uint m_score;

	public NetMessage Encode(NetConnection conn)
	{
		NetMessage msg = new NetMessage();

		// Boolean uses just one bit of data
		msg.Write(m_occupied);

		// m_gear can only be 0 to 5, so 3 bits covers the entire range
		msg.Write(m_gear, 3);

		// m_throttle is always set to 0.0f to 1.0f so we can compress this unit single
		// using only 8 bits; giving a maximum error of 0.04
		msg.WriteUnitSingle(m_throttle, 8);

		// full string length first time sent, 8-16 bits on subsequent sends
		msg.WriteStringTable(conn, m_driverName);

		// 8 bits for value 0-127, 16 bits for value 128-16383 etc
		msg.Write7BitEncodedUInt(m_score);

		return msg;
	}

	public void Decode(NetMessage msg)
	{
		m_occupied = msg.ReadBoolean();
		m_gear = msg.ReadUInt32(3);
		m_throttle = msg.ReadUnitSingle(8);
		m_driverName = msg.ReadStringTable(msg.Sender);
		m_score = msg.Read7BitEncodedUInt();
	}
}

Sign in to add a comment
Hosted by Google Code