Message compression examplepublic 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();
}
}
|