Example #1
0
        public override void Recive(long now)
        {
            int c = metaData.Count;

            if (c == 0)
            {
                if (now - lastTime > TimeOut)
                {
                    lastTime = now;
                    envelope.Clear();
                    if (_connect)
                    {
                        Disconnect();
                        _connect = false;
                    }
                }
            }
            else
            {
                lastTime = now;
                if (!_connect)
                {
                    ConnectionOK();
                }
                _connect = true;
            }
            for (int i = 0; i < c; i++)
            {
                var dat = metaData.Dequeue();
                if (dat != null)
                {
                    envelope.Unpack(dat, dat.Length, now);
                }
            }
            var queue = envelope.QueueBuf;

            c = queue.Count;
            try
            {
                for (int i = 0; i < c; i++)
                {
                    var dat = queue.Dequeue();
                    if (dat != null)
                    {
                        Dispatch(dat.data, dat.type);
                    }
                }
            }
            catch
            {
            }
        }
Example #2
0
        public override void Recive(long now)
        {
            int c = metaData.Count;

            byte[][] tmp = new byte[c][];
            lock (metaData)
                for (int i = 0; i < c; i++)
                {
                    tmp[i] = metaData.Dequeue();
                }
            if (c == 0)
            {
                if (now - lastTime > TimeOut)
                {
                    envelope.Clear();
                    Disconnect();
                }
            }
            else
            {
                lastTime = now;
                if (!_connect)
                {
                    ConnectionOK();
                }
                _connect = true;
            }
            for (int i = 0; i < c; i++)
            {
                var list = envelope.Unpack(tmp[i], tmp[i].Length, now);
                try
                {
                    if (list != null)
                    {
                        for (int j = 0; j < list.Count; j++)
                        {
                            var dat = list[j];
                            Dispatch(dat.data, dat.type);
                        }
                    }
                }
                catch
                {
                }
            }
            var ss = envelope.GetFailedData(now);//获取超时未反馈的数据

            if (ss != null)
            {
                for (int i = 0; i < ss.Length; i++)
                {
                    kcp.soc.SendTo(ss[i], endpPoint);//重新发送超时的数据
                }
            }
            ss = envelope.ValidateData.ToArray();
            envelope.ValidateData.Clear();//获取接收成功的数据
            for (int i = 0; i < ss.Length; i++)
            {
                kcp.soc.SendTo(ss[i], endpPoint); //通知对方接收数据成功
            }
        }