/// <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); }
/// <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); }
/// <summary> /// 超时调用 /// </summary> /// <returns>true-- 结束本次传输</returns> private bool AckOverTime() { string str = ""; bool state = true; if (++mRepeatCount > mRepeatMaxCount) { str = string.Format("从机应答超时,准备第{0}次重试.", mRepeatCount); state = true; } else { str = string.Format("从机应答超时,重试{0}次,达到最大重试次数.", mRepeatCount); state = false; } switch (stage) { case TransmitStage.Activity: { if (ReadFileActivityAckEvent != null) { var e = new FileServerEventArgs <FileNr.FileReadActivityAckPacket>(str, FileNr.OperatSign.ReadFileActivityACK, readFileActivityAckPacket, ackPacket); ReadFileActivityAckEvent(Thread.CurrentThread, e); } break; } case TransmitStage.Transmission: { if (ReadFileTransmitAckEvent != null) { var e = new FileServerEventArgs <FileNr.FileReadThransmitAckPacket>(str, FileNr.OperatSign.ReadFileDataResponseACK, readFileActivityAckPacket, null); ReadFileTransmitAckEvent(Thread.CurrentThread, e); } break; } } return(state); }
/// <summary> /// 时间内完成调用 /// </summary> /// <returns>true--结束本次传输</returns> private bool AckOnTime() { bool state = true; if (ackPacket.ResultSign == FileNr.FileResultSign.Success) { fileAttributeList.AddRange(ackPacket.FileAttributeList); if (ackPacket.Fllow == FileNr.FllowingFlag.Nothing) { if (CallFileEndEvent != null) { CallFileEndEvent(this, new CallFileEndEventArgs("召唤目录传输完成", fileAttributeList)); } state = false; } else { //readFileDicrectoryPacket = new FileReadPacket(0,0, BasicElement.CauseOfTransmissionList.ActivationACK,) readFileDicrectoryPacket = null; state = true; } } else { state = true; } if (CallFileDirectoryEvent != null) { var e = new FileServerEventArgs <FileNr.FileDirectoryCalledAckPacket>("从机应答:" + ackPacket.ResultSign.ToString(), FileNr.OperatSign.ReadDirectoryACK, readFileDicrectoryAckPacket, ackPacket); CallFileDirectoryEvent(Thread.CurrentThread, e); } return(state); }
/// <summary> /// 超时调用 /// </summary> /// <returns>true-- 结束本次传输</returns> private bool AckOverTime() { string str = ""; bool state = true; if (++mRepeatCount > mRepeatMaxCount) { str = string.Format("从机应答超时,准备第{0}次重试.", mRepeatCount); state = true; } else { str = string.Format("从机应答超时,重试{0}次,达到最大重试次数.", mRepeatCount); state = false; } if (CallFileDirectoryEvent != null) { var e = new FileServerEventArgs <FileNr.FileDirectoryCalledAckPacket>(str, FileNr.OperatSign.ReadDirectoryACK, null, null); CallFileDirectoryEvent(Thread.CurrentThread, e); } return(state); }
/// <summary> /// 检测数据 /// </summary> /// <returns></returns> private bool CheckData() { try { var item = mReciveQuene.Dequeue(); if (item.ASDU.InformationObject[2] != 2)//是否为文件传输包 { Console.WriteLine("不是文件传输包"); return(false); } switch (stage) { case TransmitStage.Activity: { if (item.ASDU.InformationObject[3] != 8) //是否为读文件激活确认 { Console.WriteLine("不是写文件激活确认"); return(false); } var packet = new FileNr.FileWriteActivityAckPacket(item.PacketData, 0, (byte)item.PacketData.Length); if (packet.Name != packetManager.Attribute.Name) { Console.WriteLine("名称不一致"); return(false); } if (packet.FileID != packetManager.Attribute.ID) { Console.WriteLine("ID不一致"); return(false); } writeFileActivityAckPacket = item; ackPacket = packet; return(true); } case TransmitStage.Transmission: { if (item.ASDU.InformationObject[3] != 10) //是否写文件传输确认 { Console.WriteLine("不是写文件传输确认"); return(false); } var packet = new FileNr.FileWriteThransmitAckPacket(item.PacketData, 0); if (packet.Result == FileNr.FileTransmitDescription.Success) { writeFileTransmitAckPacket = item; transmitAckPacket = packet; return(true); } else { Console.WriteLine("ID不一致"); if (WriteFileTransmitAckEvent != null) { var e = new FileServerEventArgs <FileNr.FileWriteThransmitAckPacket>("从机应答:" + packet.Result.ToString(), FileNr.OperatSign.WriteFileThransmitAck , writeFileActivityAckPacket, null); WriteFileTransmitAckEvent(Thread.CurrentThread, e); } return(false); } } } return(false); } catch (Exception ex) { throw ex; } }