Пример #1
0
        public override void ChannelInactive(IChannelHandlerContext context)
        {
            _logger.LogDebug($"[{context.GetUserId()}]下线");

            _messageController.Offline(context);

            base.ChannelInactive(context);
        }
Пример #2
0
        public override void UserEventTriggered(IChannelHandlerContext context, object evt)
        {
            if (evt is IdleStateEvent idleStateEvent)
            {
                if (idleStateEvent.State == IdleState.ReaderIdle)
                {
                    _logger.LogInformation(context.Channel.Id + "-检查心跳:" + context.GetUserId());

                    _messageController.HeartBeat(context);
                }
            }

            base.UserEventTriggered(context, evt);
        }
Пример #3
0
        public void HeartBeat(IChannelHandlerContext context)
        {
            var heartBeatTime = Convert.ToInt32(_configuration["HeartBeatTime"]);

            var lastReadTime = context.GetReaderTime();

            var now = DateTime.Now;

            if (lastReadTime != null && (now - lastReadTime).Value.Seconds > heartBeatTime)
            {
                _logger.LogInformation($"[{context.GetUserId()}]心跳超时");

                context.CloseAsync();
            }
        }
Пример #4
0
        public void Offline(IChannelHandlerContext context)
        {
            _cacheManager.Remove($"{CacheKeys.ROUTER}{context.GetUserId()}");

            SessionSocketHolder.Remove(context.GetUserId());
        }