public void addMessageType(Message msg)
 {
     if (messages.ContainsKey(msg.getType()))
     {
         throw new Exception("duplicate message type: " + msg.getType());
     }
     else
     {
         messages[msg.getType()] = msg;
     }
 }
        public void Send(Message message)
        {
            try
            {
                Octets oc = new Octets();
                oc.push(message.getType());
                oc.push(0); // message size, push later
                int oldSize = oc.Size;
                oc.push(message);
                int size = oc.Size - oldSize;
                oc.push_rollback(size + 4);
                oc.push(size); // message size, push now
                oc.push_count(size);

                socket.BeginSend(oc.getBytes(), 0, oc.Size, SocketFlags.None, new AsyncCallback(OnSendResult), null);
            }
            catch (Exception e)
            {
                UnityEngine.Debug.LogError(e);
                Close();
            }
        }