/// <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); }
private void initData() { mRepeatCount = 0; mRequestData = new ManualResetEvent(false); mExistData = new ManualResetEvent(false); serverState = false; stage = TransmitStage.Activity; }
/// <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); }