/// <summary> /// 解码并执行命令回调 /// </summary> /// <param name="dataLenght">数据流长度</param> /// <param name="actionCallback">回调函数</param> public void DecodeMessage(int dataLenght, Action <ProtocalData> actionCallback) { startIndex += dataLenght; while (true) { if (startIndex <= headLength) { return; } int bodyLength = NettyBitConverter.ToInt(data); if ((startIndex - headLength) >= bodyLength) { ProtocalData data = ProtoBufSerializable.Decode <ProtocalData>(Data, headLength, bodyLength); actionCallback(data); Array.Copy(Data, headLength + bodyLength, Data, 0, startIndex - headLength - bodyLength); startIndex -= (headLength + bodyLength); } else { break; } } }
/// <summary> /// 编码消息 /// </summary> /// <param name="data">消息对象</param> /// <returns>序列化结果</returns> public static byte[] EncodeMessage(ProtocalData data) { byte[] body = data.Encode(); byte[] head = NettyBitConverter.ToBytes(body.Length); return(head.Concat(body).ToArray()); }