public override void SendMessage(Message message)
 {
     if (_service != null)
     {
         lock (_sendingMsgCache) {
             var copy  = Message.New(message.MessageType);
             var read  = new BitDataInputStream(_exchange);
             var write = new BitDataOutputStream(_exchange);
             message.WriteTo(write);
             copy.ReadFrom(read);
             _sendingMsgCache.Add(copy);
             Monitor.Pulse(_sendingMsgCache);
         }
     }
     else
     {
         var identifiedMsg = message as IdentifiedMessage;
         if (identifiedMsg != null)
         {
             if (_messageReceiverDict.TryGetValue(IdentifiedMessage.MESSAGE_TYPE, out List <IMessageReceiver> receivers))
             {
                 foreach (var receiver in receivers)
                 {
                     receiver.MessageReceived(new IdentifiedMessage()
                     {
                         resp = true, guid = identifiedMsg.guid, innerMessage = null
                     });
                 }
             }
         }
     }
 }
        public static Networkf.Message ParseMessage(byte[] buf, ref int i)
        {
            int type    = ReadMessageType(buf, ref i);
            var stream  = new BitDataInputStream(buf, i);
            var message = Message.New(type);

            message.ReadFrom(stream);
            i = stream.i;
            return(new NetworkfMessage(message));
        }