/// <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); } }
/// <summary> /// 发送数据包 /// </summary> /// <param name="packet">数据包</param> private void sendData(XmodePacket packet) { sendDataDelegate(packet.PacketData); }