All Downloads are FREE. Search and download functionalities are using the official Maven repository.

cn.t.tool.nettytool.initializer.DaemonConfigBuilder Maven / Gradle / Ivy

package cn.t.tool.nettytool.initializer;

import cn.t.tool.nettytool.analyser.ByteBufAnalyser;
import cn.t.tool.nettytool.aware.NettyB2mDecoderAware;
import cn.t.tool.nettytool.daemon.DaemonConfig;
import cn.t.tool.nettytool.decoder.NettyB2mDecoder;
import cn.t.util.common.CollectionUtil;
import io.netty.channel.ChannelHandler;
import io.netty.handler.codec.MessageToByteEncoder;
import io.netty.handler.codec.MessageToMessageEncoder;
import io.netty.handler.logging.LogLevel;
import io.netty.handler.timeout.IdleStateHandler;
import io.netty.util.internal.logging.InternalLoggerFactory;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import java.util.function.Supplier;

public class DaemonConfigBuilder {

    private final DaemonConfig daemonConfig = new DaemonConfig();

    public DaemonConfigBuilder configByteBufAnalyser(Supplier byteBufAnalyserSupplier) {
        if(byteBufAnalyserSupplier != null) {
            daemonConfig.setNettyB2mDecoderSupplier(() -> {
                ByteBufAnalyser byteBufAnalyser = byteBufAnalyserSupplier.get();
                NettyB2mDecoder nettyB2mDecoder = new NettyB2mDecoder(byteBufAnalyser);
                if(byteBufAnalyser instanceof NettyB2mDecoderAware) {
                    ((NettyB2mDecoderAware)byteBufAnalyser).setNettyB2mDecoder(nettyB2mDecoder);
                }
                return nettyB2mDecoder;
            });
        }
        return this;
    }

    public DaemonConfigBuilder configLogLevel(LogLevel logLevel) {
        if(logLevel != null) {
            daemonConfig.setLoggingHandlerLogLevel(logLevel);
        }
        return this;
    }

    public DaemonConfigBuilder configLogFactory(InternalLoggerFactory loggerFactory) {
        if(loggerFactory != null) {
            daemonConfig.setInternalLoggerFactory(loggerFactory);
        }
        return this;
    }

    public DaemonConfigBuilder configIdleHandler(long readerIdleTime, long writerIdleTime, long allIdleTime) {
        daemonConfig.setIdleStateHandlerSupplier(() -> new IdleStateHandler(readerIdleTime, writerIdleTime, allIdleTime, TimeUnit.SECONDS));
        return this;
    }

    public DaemonConfigBuilder configM2mEncoder(List>> supplierList) {
        if(!CollectionUtil.isEmpty(supplierList)) {
            daemonConfig.setNettyM2mEncoderListSupplier(() -> {
                List> nettyTcpEncoderList = new ArrayList<>();
                supplierList.forEach(supplier -> nettyTcpEncoderList.add(supplier.get()));
                return nettyTcpEncoderList;
            });
        }
        return this;
    }

    public DaemonConfigBuilder configM2bEncoder(List>> supplierList) {
        if(!CollectionUtil.isEmpty(supplierList)) {
            daemonConfig.setNettyM2bEncoderListSupplier(() -> {
                List> nettyTcpEncoderList = new ArrayList<>();
                supplierList.forEach(supplier -> nettyTcpEncoderList.add(supplier.get()));
                return nettyTcpEncoderList;
            });
        }
        return this;
    }

    public DaemonConfigBuilder configHandler(List> supplierList) {
        if(!CollectionUtil.isEmpty(supplierList)) {
            daemonConfig.setChannelHandlerListSupplier(() -> {
                List handlerList = new ArrayList<>();
                supplierList.forEach(supplier -> handlerList.add(supplier.get()));
                return handlerList;
            });
        }
        return this;
    }

    public static DaemonConfigBuilder newInstance() {
        return new DaemonConfigBuilder();
    }

    public DaemonConfig build() {
        return daemonConfig;
    }

    private DaemonConfigBuilder() {}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy