/// <summary> /// 接收处理 /// </summary> /// <param name="data"></param> public override void OnReceive(NetworkData data) { SHSerialFrame serialFrame = new SHSerialFrame(data.Buffer); if (serialFrame.ParseToFrame(data.Buffer) == FrameBase.ResultOfParsingFrame.ReceivingCompleted && !serialFrame.IsErrorCmd) { byte[] bodyText = serialFrame.getFrameText(); Array.Reverse(bodyText); this.frameIndex = BitConverter.ToInt16(bodyText, 0) + 1; Console.WriteLine("NextFrameIndex:" + frameIndex); data.ResultData = this.frameIndex; if (this.frameIndex <= this.sHSerialPacket.FrameCount) { //发送下一帧数据 NetworkData networkData = CreateSendFrameIndexData((short)this.frameIndex); if (networkData == null) { return; } CaseSendFrame(networkData, NetworkConstants.DefaultTaskInterval, NetworkConstants.DefaultTaskCount); } } base.OnReceive(data); }
/// <summary> /// 创建发送帧 /// </summary> /// <param name="bodyByte"></param> /// <returns></returns> protected FrameBase CreateSHSerialFrame(byte cmd, byte[] bodyByte) { SHSerialFrame frame = new SHSerialFrame(cmd, bodyByte); frame.SetCheckBytes(); return(frame); }
/// <summary> /// 创建发送帧 /// </summary> /// <param name="bodyByte"></param> /// <returns></returns> protected FrameBase CreateSHSerialFrame(byte[] bodyByte) { byte cmd = Convert.ToByte(this.ControlCode); SHSerialFrame frame = new SHSerialFrame(cmd, bodyByte); frame.SetCheckBytes(); return(frame); }
/// <summary> /// 接收处理 /// </summary> /// <param name="data"></param> public override void OnReceive(NetworkData data) { int frameCount = -1; SHSerialFrame serialFrame = new SHSerialFrame(data.Buffer); if (serialFrame.ParseToFrame(data.Buffer) == FrameBase.ResultOfParsingFrame.ReceivingCompleted && !serialFrame.IsErrorCmd) { using (MemoryStream Stream = new MemoryStream(serialFrame.getFrameText(), 0, serialFrame.getFrameText().Length)) { using (BinaryReader reader = new BinaryReader(Stream)) { short readFrameIndex = reader.ReadInt16(); int frameLength = serialFrame.getTextLenght() - 2; byte[] realFrameData = reader.ReadBytes(frameLength); packet.AddOrUpdateFrameBase(readFrameIndex, realFrameData); this.frameIndex = (short)(readFrameIndex + 1); } } if (this.frameIndex <= this.frameCount) {//获取下一帧 NetworkData networkData = CreateSendFrameIndexData(this.frameIndex); if (networkData == null) { return; } CaseSendFrame(networkData, NetworkConstants.DefaultTaskInterval, NetworkConstants.DefaultTaskCount); } else { //接受完成 } } data.ResultData = frameCount; base.OnReceive(data); }