using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Chop { public class ResponseBuilder { private List Builder; public ResponseBuilder(short messageID) { Init(messageID); } public ResponseBuilder() { Builder = new List(); } public void Init(short messageID) { Builder = new List(); AppendInt16(messageID); } public void Append(object o) { Builder.AddRange(Encoding.Default.GetBytes(o.ToString())); } public void AppendChar(int i) { Append(Convert.ToChar(i)); } public void AppendByte(byte b) { Builder.Add(b); } public void AppendString(string s) { Builder.AddRange(Reorder(BitConverter.GetBytes((short)s.Length))); Append(s); } public void AppendInt32(int i) { byte[] b = BitConverter.GetBytes(i); Array.Reverse(b); Builder.AddRange(b); } public void AppendInt16(short i) { byte[] b = BitConverter.GetBytes(i); Array.Reverse(b); Builder.AddRange(b); } public void AppendBoolean(bool b) { Builder.Add(b ? (byte)1 : (byte)0); } public List ToBytes() { List SendMessage = new List(); SendMessage.AddRange(BitConverter.GetBytes(Builder.Count)); SendMessage.Reverse(); SendMessage.AddRange(Builder); return SendMessage; } public bool HasContent() { return Builder.Count > 2; } private byte[] Reorder(byte[] b) { Array.Reverse(b); return b; } public override string ToString() { return Encoding.UTF8.GetString(Builder.ToArray()); } } }