package com.armzilla.ha;

import org.apache.catalina.connector.Connector;
import org.apache.coyote.http11.Http11NioProtocol;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

/**
 * Created by arm on 9/12/15.
 */
@Component

public class TomcatConnectorBean {
    @Value("${emulator.portbase}")
    private int portBase;
    @Value("${emulator.portcount}")
    private int portCount;
    @Bean
    public EmbeddedServletContainerFactory servletContainer() {
        TomcatEmbeddedServletContainerFactory tomcat = null;
        for(int i = 0; i < portCount; i ++) {
            if(tomcat == null){
                tomcat = new TomcatEmbeddedServletContainerFactory(portBase + i);
            }else{
                tomcat.addAdditionalTomcatConnectors(createConnector(portBase + i));
            }
        }
        return tomcat;
    }

    private Connector createConnector(int portNumber) {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
        connector.setScheme("http");
        connector.setPort(portNumber);
        return connector;
    }
}