Package com.betfair.cougar.netutil.nio

Source Code of com.betfair.cougar.netutil.nio.NioConfig

/*
* Copyright 2013, The Sporting Exchange Limited
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*     http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package com.betfair.cougar.netutil.nio;

import com.betfair.cougar.netutil.nio.monitoring.SessionWriteQueueMonitoring;
import org.apache.mina.common.ByteBuffer;
import org.apache.mina.common.ThreadModel;
import org.apache.mina.common.support.BaseIoServiceConfig;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.transport.socket.nio.SocketAcceptorConfig;
import org.apache.mina.transport.socket.nio.SocketConnectorConfig;
import org.apache.mina.transport.socket.nio.SocketSessionConfig;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.jmx.export.annotation.ManagedAttribute;
import org.springframework.jmx.export.annotation.ManagedResource;

import java.io.IOException;
import java.net.InetSocketAddress;

@ManagedResource
public class NioConfig {

    private String listenAddress;
    private int listenPort;
    private Boolean keepAlive;
    private Integer sendBufferSize;
    private Integer recvBufferSize;
    private Boolean tcpNoDelay;
    private Boolean reuseAddress;

    private NioLogger nioLogger;

    private int keepAliveTimeout = 10;
    private int keepAliveInterval = 5;
    private int workerTimeout = 60;
    private long maxWriteQueueSize = 0;
    private boolean useDirectBuffersInMina = false;
    private long rpcTimeoutGranularityMillis = 100;
    private long rpcTimeoutMillis = 0; // 0 means disabled

    public NioConfig() {
    }

    public InetSocketAddress getServerSocketAddress() {
        return new InetSocketAddress(listenAddress, listenPort);
    }

    public void configureSocketAcceptorConfig(SocketAcceptorConfig config) throws IOException {
        if (reuseAddress != null) {
            config.setReuseAddress(reuseAddress);
        }
        configureSocketSessionConfig(config.getSessionConfig());
        configureProtocol(config, true);
    }

    private void configureSocketSessionConfig(SocketSessionConfig config) {
        if (keepAlive != null) {
            config.setKeepAlive(keepAlive);
        }
        if (sendBufferSize != null) {
            config.setSendBufferSize(sendBufferSize);
        }

        if (recvBufferSize != null) {
            config.setReceiveBufferSize(recvBufferSize);
        }

        if (tcpNoDelay != null) {
            config.setTcpNoDelay(tcpNoDelay);
        }

        if (reuseAddress != null) {
            config.setReuseAddress(reuseAddress);
        }
    }


    protected void configureProtocol(BaseIoServiceConfig config, boolean isServer) throws IOException {

        ByteBuffer.setUseDirectBuffers(useDirectBuffersInMina);

        config.getFilterChain().addLast("slowHandling", new SessionWriteQueueMonitoring(nioLogger, maxWriteQueueSize));
        config.getFilterChain().addLast("codec",
                new ProtocolCodecFilter(new CougarProtocolEncoder(nioLogger), new CougarProtocolDecoder(nioLogger)));
        if (isServer) {
            config.getFilterChain().addLast("protocol", CougarProtocol.getServerInstance(nioLogger, keepAliveInterval, keepAliveTimeout, null, false, false));
        }
        else {
            config.getFilterChain().addLast("protocol", CougarProtocol.getClientInstance(nioLogger, keepAliveInterval, keepAliveTimeout, null, false, false, rpcTimeoutMillis));
        }

        config.setThreadModel(ThreadModel.MANUAL);
    }


    public synchronized SocketConnectorConfig configureSocketSessionConfig() throws IOException {
        SocketConnectorConfig config = new SocketConnectorConfig();
        configureSocketSessionConfig(config.getSessionConfig());
        configureProtocol(config, false);
        return config;
    }

    @ManagedAttribute
    public String getListenAddress() {
        return listenAddress;
    }

    public void setListenAddress(String listenAddress) {
        this.listenAddress = listenAddress;
    }

    @ManagedAttribute
    public int getListenPort() {
        return listenPort;
    }

    public void setListenPort(int listenPort) {
        this.listenPort = listenPort;
    }

    @ManagedAttribute
    public Boolean getKeepAlive() {
        return keepAlive;
    }

    public void setKeepAlive(Boolean keepAlive) {
        this.keepAlive = keepAlive;
    }


    @ManagedAttribute
    public Integer getSendBufferSize() {
        return sendBufferSize;
    }

    public void setSendBufferSize(Integer sendBufferSize) {
        this.sendBufferSize = sendBufferSize;
    }

    @ManagedAttribute
    public Integer getRecvBufferSize() {
        return recvBufferSize;
    }

    public void setRecvBufferSize(Integer recvBufferSize) {
        this.recvBufferSize = recvBufferSize;
    }

    @ManagedAttribute
    public Boolean getTcpNoDelay() {
        return tcpNoDelay;
    }

    public void setTcpNoDelay(Boolean tcpNoDelay) {
        this.tcpNoDelay = tcpNoDelay;
    }

    @ManagedAttribute
    public Boolean getReuseAddress() {
        return reuseAddress;
    }

    public void setReuseAddress(Boolean reuseAddress) {
        this.reuseAddress = reuseAddress;
    }

    @ManagedAttribute
    public int getKeepAliveTimeout() {
        return keepAliveTimeout;
    }

    public void setKeepAliveTimeout(int keepAliveTimeout) {
        this.keepAliveTimeout = keepAliveTimeout;
    }

    @ManagedAttribute
    public int getKeepAliveInterval() {
        return keepAliveInterval;
    }

    public void setKeepAliveInterval(int keepAliveInterval) {
        this.keepAliveInterval = keepAliveInterval;
    }

    @ManagedAttribute
    public long getMaxWriteQueueSize() {
        return maxWriteQueueSize;
    }

    public void setMaxWriteQueueSize(long maxWriteQueueSize) {
        this.maxWriteQueueSize = maxWriteQueueSize;
    }

    @ManagedAttribute
    public boolean isUseDirectBuffersInMina() {
        return useDirectBuffersInMina;
    }

    public void setUseDirectBuffersInMina(boolean useDirectBuffersInMina) {
        this.useDirectBuffersInMina = useDirectBuffersInMina;
    }

    public void setNioLogger(NioLogger nioLogger) {
        this.nioLogger = nioLogger;
    }

    public NioLogger getNioLogger() {
        return nioLogger;
    }

    public void setWorkerTimeout(int workerTimeout) {
        this.workerTimeout = workerTimeout;
    }

    @ManagedAttribute
    public int getWorkerTimeout() {
        return workerTimeout;
    }

    @ManagedAttribute
    public long getRpcTimeoutGranularityMillis() {
        return rpcTimeoutGranularityMillis;
    }

    @ManagedAttribute
    public long getRpcTimeoutMillis() {
        return rpcTimeoutMillis;
    }

    public void setRpcTimeoutGranularityMillis(long rpcTimeoutGranularityMillis) {
        this.rpcTimeoutGranularityMillis = rpcTimeoutGranularityMillis;
    }

    public void setRpcTimeoutMillis(long rpcTimeoutMillis) {
        this.rpcTimeoutMillis = rpcTimeoutMillis;
    }
}
TOP

Related Classes of com.betfair.cougar.netutil.nio.NioConfig

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.