package com.tsi.app.common.xnet;

import lombok.Data;

@Data
public abstract class NettyServerConfig {

    protected String bindingAddr = "";
    protected int bindingPort = 9091;
    protected int backlog = 0;
    protected int acceptThreads = 0;
    protected int workerThreads = 0;
    protected int rcvBuf = 0;
    protected int sndBuf = 0;
    protected int readerIdleTimeSeconds = 0;
    protected int writerIdleTimeSeconds = 0;
    protected int allIdleTimeSeconds = 0;
    protected int connectTimeoutSeconds = 0;

    protected void configure() {
/*
        int MAX_CORE = Runtime.getRuntime().availableProcessors();
        if (MAX_CORE < 8) {
            MAX_CORE = 8;
        }
        int totalThreads = MAX_CORE * 2;
*/
        final int DEFAULT_EVENT_THREADS  = Runtime.getRuntime().availableProcessors() * 2;


        if (this.bindingAddr.equals("")) {
            this.bindingAddr = "0.0.0.0";
        }
        if (this.backlog == 0) {
            this.backlog = 1024;
        }
        /*if (this.acceptThreads == 0) {
            if (MAX_CORE <= 8) {
                this.acceptThreads = 4;
            } else if (MAX_CORE >= 32) {
                this.acceptThreads = 12;
            } else {
                this.acceptThreads = 6;
            }
        }
        if (this.workerThreads == 0) {
            this.workerThreads = totalThreads - this.acceptThreads;
        }*/
        if (this.acceptThreads == 0) {
            this.acceptThreads = DEFAULT_EVENT_THREADS;
        }
        if (this.workerThreads == 0) {
            this.workerThreads = DEFAULT_EVENT_THREADS;
        }

        if (this.rcvBuf == 0) {
            this.rcvBuf = Short.MAX_VALUE / 2;
        }
        if (this.sndBuf == 0) {
            this.sndBuf = Short.MAX_VALUE / 2;
        }
    }
}
