Beispiel #1
0
        static byte[] Encode(object message)
        {
            if (message == null)
            {
                return(TransferPacket.EmptyByteArray);
            }
            var type     = message.GetType();
            var typeCode = BinarySerializer.GetTypeCode(type);

            byte[] body;
            try
            {
                body = BinarySerializer.Serialize(message);
            }
            catch (System.Exception ex)
            {
                //序列化报文异常
                SystemRunErrorPorvider.CatchException(ex);
                return(TransferPacket.EmptyByteArray);
            }
            var data = new byte[2 + body.Length];

            unsafe
            {
                // 消息主码
                data[0] = (byte)(typeCode / 256);
                //消息辅码
                data[1] = (byte)typeCode;
                // 2.包体。
                Buffer.BlockCopy(body, 0, data, 2, body.Length);

                return(TransferPacket.UnsafePacketData(TransferPacketType.Binnary, data));
            }
        }
Beispiel #2
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="meeage"></param>
 public TransferMessage(string meeage)
 {
     this.UPacketData = TransferPacket.UnsafePacketData(TransferPacketType.Binnary, meeage.GetBytes());
     this._message    = meeage;
 }
Beispiel #3
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="buffer"></param>
 /// <param name="packdata"></param>
 /// <param name="needBytesPackdata"></param>
 /// <returns></returns>
 private static unsafe bool UnPacketData(byte[] buffer, out TransferPacket packdata, bool needBytesPackdata = false)
 {
     return(UnPacketData(new NetworkStream(buffer), out packdata, needBytesPackdata));
 }
Beispiel #4
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="meeage"></param>
 public TransferMessage(TransferPacket meeage)
 {
     this.UPacketData = meeage;
 }
Beispiel #5
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="buffer"></param>
        /// <param name="packdata"></param>
        /// <param name="needBytesPackdata"></param>
        /// <returns></returns>
        private static bool UnPacketData(NetworkStream buffer, out TransferPacket packdata, bool needBytesPackdata = false)
        {
            packdata = Null;
            byte[] data          = null;
            byte[] bytespackdata = null;
            int    index         = 0;
            int    read          = 2;

            while (true)
            {
                if (buffer.Count < index + 1)
                {
                    return(false);
                }
                switch (buffer[index])
                {
                case (byte)TransferPacketType.HeartBeatPing:
                {
                    #region 心跳包消息

                    //心跳包消息
                    packdata = TransferPacket.HeartBeatPing;
                    //删除前导无效数据
                    buffer.Remove(index + 1);
                    return(true);

                    #endregion
                }

                case (byte)TransferPacketType.HeartBeatPong:
                {
                    #region 心跳包响应消息

                    //心跳包响应消息
                    packdata = TransferPacket.HeartBeatPong;
                    //删除前导无效数据
                    buffer.Remove(index + 1);
                    return(true);

                    #endregion
                }

                case (byte)TransferPacketType.Binnary:
                {
                    #region 二进制流数据拆包


                    //删除前导无效数据
                    buffer.Remove(index);
                    if (buffer.Count < 1)
                    {
                        return(false);
                    }
                    int len;
                    if (!ReadLength(buffer, out len, ref read))
                    {
                        return(false);
                    }
                    if (buffer.Count < len + read)
                    {
                        return(false);
                    }

                    data = buffer.ReadArray(read, len);
                    if (needBytesPackdata)
                    {
                        bytespackdata = buffer.ReadAndRemoveBytes(len + read);
                    }
                    else
                    {
                        buffer.Remove(len + read);
                    }
                    packdata = new TransferPacket(TransferPacketType.Binnary, data, bytespackdata);

                    return(true);

                    #endregion
                };

                default:
                {
                    index++;
                    continue;
                }
                }
            }
        }