abstractsessionacceptor.java

来自「银行项目为后台socket通信写的程序」· Java 代码 · 共 139 行

JAVA
139
字号
/****************************************************************************
 * Package		: com.ecSolutions.ecAppServer.server.session
 * File			: AbstractSessionAcceptor.java
 * Create Date  : 2007-7-20
 * Author		: Steven Chen
 * 
 * Copyright(C) 2006 ecSolutions(shanghai) Co.,Limited.All Rights Reserved.
 *			
 ***************************************************************************/
package com.ecSolutions.ecAppServer.server.session;

import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketAddress;

import com.ecSolutions.ecAppServer.server.Session;
import com.ecSolutions.ecAppServer.server.SessionAcceptor;
import com.ecSolutions.ecAppServer.server.SessionAcceptorHandler;
import com.ecSolutions.ecAppServer.server.util.Configuration;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * Abstract session acceptor.
 * 
 * @author Steven Chen
 * @version $Id: AbstractSessionAcceptor.java,v 1.2 2007/07/26 03:33:50 stevenchen Exp $
 */
public abstract class AbstractSessionAcceptor implements SessionAcceptor {

    private static final Log log = LogFactory
            .getLog(AbstractSessionAcceptor.class);

    private SocketAddress address = new InetSocketAddress(0);
    private int port = 0;
    private int backlog = Configuration.getAcceptorBacklog();
    private boolean reuseAddr = Configuration.isReuseAcceptorAddress();
    private SessionAcceptorHandler handler = null;

    public void setListenAddress(SocketAddress address) {
        if (address != null) {
            if (isStarted())
                throw new IllegalStateException(
                        "can't set listen address after acceptor started");
            this.address = address;
        }
    }

    public SocketAddress getListenAddress() {
        return address;
    }

    public void setListenPort(int port) {
        if (isStarted())
            throw new IllegalStateException(
                    "can't set listen port after acceptor started");
        this.port = port;
        this.address = new InetSocketAddress(port);
    }

    public int getListenPort() {
        return port;
    }

    public int getBacklog() {
        return backlog;
    }

    public void setBacklog(int backlog) {
        if (isStarted())
            throw new IllegalStateException(
                    "can't set backlog after acceptor started");
        this.backlog = backlog;
    }

    public boolean isReuseAddress() {
        return reuseAddr;
    }

    public void setReuseAddress(boolean b) {
        if (isStarted())
            throw new IllegalStateException(
                    "can't set reuse address after acceptor started");
        this.reuseAddr = b;
    }

    public SessionAcceptorHandler getAcceptorHandler() {
        return handler;
    }

    public void setAcceptorHandler(SessionAcceptorHandler handler) {
        if (handler != null)
            this.handler = handler;
    }

    protected void setSocketOptions(Socket socket) throws IOException {
        int recvBufferSize = Configuration.getRecvBufferSize();
        if (recvBufferSize > 0)
            socket.setReceiveBufferSize(recvBufferSize);

        int sendBufferSize = Configuration.getSendBufferSize();
        if (sendBufferSize > 0)
            socket.setSendBufferSize(sendBufferSize);

        socket.setReuseAddress(Configuration.isReuseSessionAddress());
        socket.setTcpNoDelay(Configuration.isTcpNoDelay());
    }

    protected void setServerSocketOptions(ServerSocket socket)
            throws IOException {
        socket.setReuseAddress(isReuseAddress());

        int recvBufferSize = Configuration.getRecvBufferSize();
        if (recvBufferSize > 0)
            socket.setReceiveBufferSize(recvBufferSize);

        socket.bind(getListenAddress(), getBacklog());
    }

    protected final void exceptionCaught(Throwable e) {
        try {
            handler.exceptionCaught(this, e);
        } catch (Throwable throwable) { // protect catch
            log.error(throwable, throwable);
        }
    }

    protected final void sessionAccepted(Session session) {
        try {
            handler.sessionAccepted(this, session);
        } catch (Throwable e) {
            exceptionCaught(e);
        }
    }
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?