private void createSessionAndReregister(ChannelHandlerContext ctx, User user, DashBoard dash, Device device, int msgId) { HardwareStateHolder hardwareStateHolder = new HardwareStateHolder(user, dash, device); ChannelPipeline pipeline = ctx.pipeline(); pipeline.replace(this, "HHArdwareHandler", new HardwareHandler(holder, hardwareStateHolder)); Session session = holder.sessionDao.getOrCreateSessionByUser( hardwareStateHolder.userKey, ctx.channel().eventLoop()); if (session.isSameEventLoop(ctx)) { completeLogin(ctx.channel(), session, user, dash, device, msgId); } else { log.debug("Re registering hard channel. {}", ctx.channel()); ReregisterChannelUtil.reRegisterChannel(ctx, session, channelFuture -> completeLogin(channelFuture.channel(), session, user, dash, device, msgId)); } }