下面列出了怎么用io.netty.channel.DefaultChannelPipeline的API类实例代码及写法,或者点击链接到github查看源代码。
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));
}
}
private static void cleanPipeline(DefaultChannelPipeline pipeline) {
pipeline.removeIfExists(MobileLoginHandler.class);
pipeline.removeIfExists(UserNotLoggedHandler.class);
pipeline.removeIfExists(MobileGetServerHandler.class);
pipeline.removeIfExists(MobileRegisterHandler.class);
pipeline.removeIfExists(MobileShareLoginHandler.class);
pipeline.removeIfExists(MobileResetPasswordHandler.class);
}
@Override
protected final DefaultChannelPipeline newChannelPipeline() {
return new EmbeddedChannelPipeline(this);
}
private ChannelFuture failedFuture(String message) {
DefaultChannelPipeline pipeline = new DefaultChannelPipeline(ch) {
};
return pipeline.newFailedFuture(new RuntimeException(message));
}