示例#1
0
 /// <summary>
 /// 添加数据包到列表
 /// </summary>
 /// <param name="packet">数据包</param>
 private void AddPacketToList(FileDataThransmitPacket packet)
 {
     listPacket.Add(packet);
     addCount = (UInt32)(addCount + packet.FileData.Length);
     if (addCount > mAttribute.Size)
     {
         overFlag = true;
     }
     if (packet.Fllow == FllowingFlag.Nothing)
     {
         fullFlag = true;
     }
 }
示例#2
0
        /// <summary>
        /// 添加数据包--用于接收数据
        /// </summary>
        /// <param name="packet">校验后的数据包</param>
        /// <returns>FileTransmitDescription 代码</returns>
        public FileTransmitDescription AddPacketData(FileDataThransmitPacket packet)
        {
            try
            {
                if (fullFlag)
                {
                    return(FileTransmitDescription.UnknowError);
                }

                if (!packet.CheckSame())
                {
                    return(FileTransmitDescription.CheckError);
                }


                if (mAttribute.ID != packet.FileID)//检测ID是否一致
                {
                    return(FileTransmitDescription.DifferentID);
                }

                if (CurrentPacket != null)
                {
                    if (CurrentPacket.NextFragmentNum != packet.FragmentNum)//检测段号是否连续
                    {
                        return(FileTransmitDescription.DifferentFileLen);
                    }
                    if (CurrentPacket.Fllow != FllowingFlag.Exist) //检测上次是否已满
                    {
                        return(FileTransmitDescription.UnknowError);
                    }
                    else
                    {
                        AddPacketToList(packet);

                        return(FileTransmitDescription.Success);
                    }
                }
                else
                {
                    AddPacketToList(packet);
                    return(FileTransmitDescription.Success);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
示例#3
0
 /// <summary>
 /// 文件包初始化--每次文件传输最大按200字节计算
 /// </summary>
 /// <param name="attribute">文件属性</param>
 /// <param name="fileData">文件数据</param>
 public FilePacketManager(FileAttribute attribute, byte[] fileData)
     : this(attribute)
 {
     try
     {
         if (fileData.Length == 0)
         {
             throw new ArgumentException("打包数据长度不能为0");
         }
         int max    = 200;
         int count  = fileData.Length / max;
         int remain = fileData.Length % max;
         for (int i = 0; i < count; i++)
         {
             UInt32 frage  = (UInt32)(i * max);
             var    packet = new FileDataThransmitPacket(OperatSign.WriteFileThransmit, mAttribute.ID,
                                                         frage, FllowingFlag.Exist, fileData, (int)frage, max);
             listPacket.Add(packet);
             addCount = (UInt32)(addCount + max);
         }
         if (remain != 0)
         {
             UInt32 frage  = (UInt32)(count * max);
             var    packet = new FileDataThransmitPacket(OperatSign.WriteFileThransmit, mAttribute.ID,
                                                         frage, FllowingFlag.Nothing, fileData, (int)frage, remain);
             addCount = (UInt32)(addCount + remain);
         }
         else
         {
             CurrentPacket.Fllow = FllowingFlag.Nothing;
         }
         fullFlag = true;
     }
     catch (Exception ex)
     {
         throw ex;
     }
 }
示例#4
0
 /// <summary>
 /// 文件服务--写文件数据传输
 /// </summary>
 /// <param name="transmitSeqNum">发送序列号</param>
 /// <param name="receiveSeqNum">接收序列号</param>
 /// <param name="cot">传输原因</param>
 /// <param name="ASDUPublicAddress">ASDU公共地址</param>
 /// <param name="transmitDataPacket">传输包数据</param>
 public FileWritePacket(UInt16 transmitSeqNum, UInt16 receiveSeqNum,
                        CauseOfTransmissionList cot, UInt16 ASDUPublicAddress,
                        FileDataThransmitPacket transmitDataPacket)
     : base(transmitSeqNum, receiveSeqNum, cot, ASDUPublicAddress, transmitDataPacket.GetPacketData())
 {
 }