示例#1
0
        /// <summary>
        /// 数据包管理器初始化
        /// </summary>
        /// <param name="data">需要打包的数据</param>
        /// <param name="len">数据长度</param>
        /// <param name="startHeader">开始字符</param>
        public XmodePacketManager(byte[] data, int len, XmodeStartHeader startHeader)
        {
            int validDataLen = 128;

            if (XmodeStartHeader.SOH == startHeader)
            {
                validDataLen = 128;
            }
            else if (XmodeStartHeader.STX == startHeader)
            {
                validDataLen = 1024;
            }
            else
            {
                throw new Exception("XmodePacketManager:错误头长度");
            }



            if (data.Length < len)
            {
                throw new Exception("XmodePacketManager:数据长度小于所需长度");
            }

            if (len > 255 * validDataLen)
            {
                throw new Exception("XmodePacketManager:数据长度超过一次传输的最大长度");
            }
            packetList = new List <XmodePacket>();

            int fullLen   = len / validDataLen;
            int remainLen = len % validDataLen;

            for (int i = 0; i < fullLen; i++)
            {
                var array = new byte[validDataLen];
                Array.Copy(data, i * validDataLen, array, 0, validDataLen);
                var packet = new XmodePacket(startHeader, (byte)(i + 1), data, validDataLen);
                packetList.Add(packet);
            }
            if (remainLen != 0)
            {
                var dataArray = new byte[remainLen];
                Array.Copy(data, fullLen * validDataLen, dataArray, 0, remainLen);
                var packet = new XmodePacket(startHeader, (byte)(fullLen + 1), data, remainLen);
                packetList.Add(packet);
            }
        }
示例#2
0
 /// <summary>
 /// 发送数据包
 /// </summary>
 /// <param name="packet">数据包</param>
 private void sendData(XmodePacket packet)
 {
     sendDataDelegate(packet.PacketData);
 }