예제 #1
0
        public void Tick()
        {
            var now = Environment.TickCount;

            if (State == PixocketState.Connecting && TimeDelta(_lastConnectRequestSend, now) >= ConnectRequestResendPeriod)
            {
                SendConnectionRequest();
            }

            foreach (var seqState in _seqStates)
            {
                if (TimeDelta(seqState.Value.LastActive, now) > ConnectionTimeout)
                {
                    _toDelete.Add(seqState);
                    continue;
                }

                seqState.Value.Tick(seqState.Key, SubSock, now, AckTimeout, FragmentTimeout);
            }

            var toDeleteCount = _toDelete.Count;

            for (int i = 0; i < toDeleteCount; ++i)
            {
                var seqState = _toDelete[i];
                _seqStates.Remove(seqState.Key);
                _callbacks.OnDisconnect(seqState.Key, DisconnectReason.Timeout);
                _seqStatesPool.Put(seqState.Value);
            }

            _toDelete.Clear();
        }
예제 #2
0
        public void Tick()
        {
            while (_disconnectQueue.TryTake(out var disconnectPair))
            {
                _callbacks.OnDisconnect(disconnectPair.Key, disconnectPair.Value);
            }

            while (_connectQueue.TryTake(out var connectEndPoint))
            {
                _callbacks.OnConnect(connectEndPoint);
            }
        }