public override void ChannelInactive(IChannelHandlerContext context) { _logger.LogDebug($"[{context.GetUserId()}]下线"); _messageController.Offline(context); base.ChannelInactive(context); }
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); }
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(); } }
public void Offline(IChannelHandlerContext context) { _cacheManager.Remove($"{CacheKeys.ROUTER}{context.GetUserId()}"); SessionSocketHolder.Remove(context.GetUserId()); }