Exemple #1
0
        /// <summary>
        /// 接收确认包
        /// </summary>
        /// <param name="package"></param>
        public void AddAck(ACKPackage package)
        {
            var seqPack = SendBuffer.Find(x => x.PackSeq == package.PackSeq);

            if (seqPack != null)
            {
                SendBuffer.Remove(seqPack);
                QueuePool.Roll(seqPack.Data);//回收数据
            }
        }
Exemple #2
0
 private void SendAck()
 {
     Task.Factory.StartNew(() => {
         for (int i = 0; i < Len; i++)
         {
             if (!lstSeq.Contains(i))
             {
                 ACKPackage package = new ACKPackage();
                 package.PackID     = this.PackID;
                 package.PackSeq    = i;
                 Stream.Write(DestHost, DestPort, package.GetBuffer());
             }
         }
     });
 }
Exemple #3
0
        /// <summary>
        /// 从接收session接收数据
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="data"></param>
        /// <param name="host"></param>
        private void Stream_DataCall(object sender, byte[] data, HostAndPort host)
        {
            //创建类型
            BasePackage package = new BasePackage(data);

            //所有接收信息都经过
            switch (package.PackType)
            {
            case PackageControl.Data:
                package = new DATAPackage(data);
                break;

            case PackageControl.Ack:
                package = new ACKPackage(data);
                break;

            case PackageControl.Fin:
                package = new  FINPackage(data);
                break;

            case PackageControl.Lost:
                package = new LostPackage(data);
                break;

            case PackageControl.ShutDown:
                package = new ShutDownPackage(data);
                break;

            case PackageControl.Syn:
                package = new SYNPackage(data);
                break;
            }
            package.DestHost = host.Host;
            package.DestPort = host.Port;
            AddPackage(host, package);
        }