public void handleMessage(Message msg)
        {
            print ("Receive: " + msg.Marshal ());

            if (msg.type == Const.kHandshakeAccept) {
                if (status == kStatusConnecting) {
                    id = msg.peer_id;
                } else {
                    Debug.LogError ("Unexpected handshake accept: " + msg.type);
                }

            } else if (msg.type == Const.kHandshakeError) {
                if (status == kStatusConnecting && connectingRetries < maxConnectingRetries) {
                    connectingRetries += 1;
                    Debug.LogError ("Handshake error. Retry " + connectingRetries + "/" + maxConnectingRetries + ": " + msg.type);

                    this.Invoke ("setupSocket", 500);
                    closeSocket ();
                    status = kStatusDisconnected;

                } else {
                    Debug.LogError ("Handshake error. Disconnected: " + msg.type);
                }

            } else if (msg.type == Const.kHandshakeClose) {
                Debug.Log ("Receive handshake close");
                status = kStatusDisconnected;
                closeSocket ();

            } else if (msg.type.StartsWith (Const.kHandshake)) {
                Debug.LogWarning ("Unknown handshake message: " + msg.type);

            } else if (msg.type == Const.kAck) {
                // Do nothing

            } else {
                handleControlMessage (msg);
            }
        }
 public void sendMessage(Message msg)
 {
     string s = msg.Marshal ();
     Debug.Log ("Send message: " + s);
     writeSocket (s);
 }