Exemple #1
0
        /// <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);
        }