Пример #1
0
        /// <summary>
        /// 时间内完成调用
        /// </summary>
        /// <returns>true--结束本次传输</returns>
        private bool AckOnTime()
        {
            switch (stage)
            {
            case TransmitStage.Activity:
            {
                if (WriteFileActivityAckEvent != null)
                {
                    var e = new FileServerEventArgs <FileNr.FileWriteActivityAckPacket>("从机应答", FileNr.OperatSign.WriteFileActivityAck,
                                                                                        writeFileActivityAckPacket, ackPacket);
                    WriteFileActivityAckEvent(Thread.CurrentThread, e);
                }
                mRepeatCount = 0;
                stage        = TransmitStage.Transmission;

                transmitPacket          = packetManager.PacketCollect[ackCount];
                writeFileTransmitPacket = new FileWritePacket(0, 0, CauseOfTransmissionList.ActivationACK,
                                                              0, transmitPacket);



                return(false);
            }

            case TransmitStage.Transmission:
            {
                bool state = false;
                FileNr.FileTransmitDescription result = FileNr.FileTransmitDescription.UnknowError;
                //先检测确认包
                if ((transmitAckPacket.FragmentNum == packetManager.PacketCollect[ackCount].FragmentNum) &&
                    (transmitAckPacket.Result == FileNr.FileTransmitDescription.Success))
                {
                    result = FileNr.FileTransmitDescription.Success;
                    if (++ackCount < packetManager.PacketCollect.Count)
                    {
                        transmitPacket          = packetManager.PacketCollect[ackCount];
                        writeFileTransmitPacket = new FileWritePacket(0, 0, CauseOfTransmissionList.ActivationACK,
                                                                      0, transmitPacket);
                    }
                    else
                    {
                        state = true;
                    }
                    mRepeatCount = 0;
                }
                if (WriteFileTransmitAckEvent != null)
                {
                    var e = new FileServerEventArgs <FileNr.FileWriteThransmitAckPacket>("从机应答:" + result.ToString(), FileNr.OperatSign.WriteFileThransmitAck
                                                                                         , writeFileActivityAckPacket, null);
                    WriteFileTransmitAckEvent(Thread.CurrentThread, e);
                }
                return(state);
            }
            }



            return(true);
        }
Пример #2
0
 private void initData()
 {
     mRepeatCount = 0;
     mRequestData = new ManualResetEvent(false);
     mExistData   = new ManualResetEvent(false);
     serverState  = false;
     stage        = TransmitStage.Activity;
 }
Пример #3
0
        /// <summary>
        /// 时间内完成调用
        /// </summary>
        /// <returns>true--结束本次传输</returns>
        private bool AckOnTime()
        {
            switch (stage)
            {
            case TransmitStage.Activity:
            {
                if (ReadFileActivityAckEvent != null)
                {
                    var e = new FileServerEventArgs <FileNr.FileReadActivityAckPacket>("从机应答", FileNr.OperatSign.ReadFileActivityACK,
                                                                                       readFileActivityAckPacket, ackPacket);
                    ReadFileActivityAckEvent(Thread.CurrentThread, e);
                }
                mRepeatCount = 0;
                stage        = TransmitStage.Transmission;
                return(false);
            }

            case TransmitStage.Transmission:
            {
                var result = packetManager.AddPacketData(transmitPacket);
                if (result == FileNr.FileTransmitDescription.Success)
                {
                    var addPacket = new FileNr.FileReadThransmitAckPacket(packetManager.Attribute.ID,
                                                                          packetManager.CurrentPacket.FragmentNum, packetManager.CurrentPacket.Fllow);
                    readFileTransmitAckPacket = new FilePacket(0, 0, CauseOfTransmissionList.ActivationACK,
                                                               0, addPacket.GetPacketData());
                }
                else
                {
                    if (ReadFileTransmitAckEvent != null)
                    {
                        var e = new FileServerEventArgs <FileNr.FileReadThransmitAckPacket>("从机应答:" + result.ToString(), FileNr.OperatSign.ReadFileDataResponseACK,
                                                                                            readFileActivityAckPacket, null);
                        ReadFileTransmitAckEvent(Thread.CurrentThread, e);
                    }
                }
                mRepeatCount = 0;
                return(false);
            }
            }



            return(true);
        }