private void login(ChannelHandlerContext ctx, int messageId, User user, Version version) { var pipeline = (DefaultChannelPipeline) ctx.pipeline(); cleanPipeline(pipeline); var appStateHolder = new MobileStateHolder(user, version); pipeline.addLast("AAppHandler", new MobileHandler(holder, appStateHolder)); var channel = ctx.channel(); //todo back compatibility code. remove in future. if (user.region == null || user.region.isEmpty()) { user.region = holder.props.region; } var session = holder.sessionDao.getOrCreateSessionByUser(appStateHolder.userKey, channel.eventLoop()); if (session.isSameEventLoop(channel)) { completeLogin(channel, session, user, messageId, version); } else { log.debug("Re registering app channel. {}", ctx.channel()); ReregisterChannelUtil.reRegisterChannel(ctx, session, channelFuture -> completeLogin(channelFuture.channel(), session, user, messageId, version)); } }