Esempio n. 1
0
 /// <summary>
 /// 添加包
 /// </summary>
 /// <param name="package"></param>
 /// <returns></returns>
 public bool Add(DATAPackage package)
 {
     ds[package.PackSeq] = package;
     lstSeq.Remove(package.PackSeq);
     lastRecNum = WaitRecNum;
     if (index == 0)
     {
         SendLost();
     }
     index++;
     if (index >= ds.Length)
     {
         Check();
     }
     return(index == ds.Length);
 }
Esempio n. 2
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);
        }
Esempio n. 3
0
        public void Send(byte[] data, int offset, int length, string host, int port)
        {
            int   seq        = 0;
            int   len        = length;
            short curentSize = 0;

            //分包
            while (len > 0)
            {
                byte[] buf = QueuePool.GetBuffers();
                if (len > buf.Length)
                {
                    len        = len - buf.Length;
                    curentSize = (short)buf.Length;
                }
                else
                {
                    curentSize = (short)len;
                    len        = 0;
                }
                Array.Copy(data, offset + seq * curentSize, buf, 0, curentSize);
                DATAPackage package = new DATAPackage
                {
                    Length     = length,
                    PackID     = Uilt.GlobID,
                    PackSeq    = seq,
                    PackLength = curentSize,
                    PackSize   = PackageControl.PackSize - BasePackage.PackSum,
                    Data       = buf,
                    DestHost   = host,
                    DestPort   = port
                };
                seq++;
                senderSession.Add(package);
            }
        }
Esempio n. 4
0
 /// <summary>
 /// 放置发送的数据
 /// </summary>
 /// <param name="package"></param>
 public void AddData(DATAPackage package)
 {
     SendBuffer.Add(package);
     SendData(package);
     LastFulsh = ReSendNum;
 }