/*******************************************************************************
* This file is part of OpenNMS(R).
*
* Copyright (C) 2008-2011 The OpenNMS Group, Inc.
* OpenNMS(R) is Copyright (C) 1999-2011 The OpenNMS Group, Inc.
*
* OpenNMS(R) is a registered trademark of The OpenNMS Group, Inc.
*
* OpenNMS(R) is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published
* by the Free Software Foundation, either version 3 of the License,
* or (at your option) any later version.
*
* OpenNMS(R) is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with OpenNMS(R). If not, see:
* http://www.gnu.org/licenses/
*
* For more information contact:
* OpenNMS(R) Licensing <license@opennms.org>
* http://www.opennms.org/
* http://www.opennms.com/
*******************************************************************************/
package org.opennms.netmgt.provision.server;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.service.IoHandler;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import org.opennms.netmgt.provision.server.exchange.LineConversation;
/**
* <p>AsyncSimpleServer class.</p>
*
* @author thedesloge
* @version $Id: $
*/
public class AsyncSimpleServer {
protected static final Charset CHARSET_UTF8 = Charset.forName("UTF-8");
private LineConversation m_lineConversation;
private IoAcceptor m_acceptor;
private IoHandler m_ioHandler;
private int m_port = 9123;
private int m_bufferSize = 2048;
private int m_idleTime = 10;
/**
* <p>init</p>
*
* @throws java.lang.Exception if any.
*/
public final void init() throws Exception {
m_lineConversation = new LineConversation();
onInit();
}
/**
* <p>onInit</p>
*/
protected void onInit() {
// Do nothing by default
}
/**
* <p>startServer</p>
*
* @throws java.lang.Exception if any.
*/
public void startServer() throws Exception {
m_acceptor = new NioSocketAcceptor();
m_acceptor.getFilterChain().addLast("logger", new LoggingFilter());
m_acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(CHARSET_UTF8)));
m_acceptor.setHandler(getServerHandler());
m_acceptor.getSessionConfig().setReadBufferSize(getBufferSize());
m_acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, getIdleTime());
((NioSocketAcceptor) m_acceptor).setReuseAddress(true);
m_acceptor.bind(new InetSocketAddress(getPort()));
}
/**
* <p>stopServer</p>
*
* @throws java.lang.Exception if any.
*/
public void stopServer() throws Exception{
m_acceptor.unbind();
m_acceptor.dispose();
}
/**
* <p>addRequestHandler</p>
*
* @param request a {@link java.lang.String} object.
* @param response a {@link java.lang.String} object.
*/
public void addRequestHandler(String request, String response) {
m_lineConversation.addRequestHandler(request, response);
}
/**
* <p>setBanner</p>
*
* @param banner a {@link java.lang.String} object.
*/
public void setBanner(String banner) {
m_lineConversation.setBanner(banner);
}
/**
* <p>setExpectedClose</p>
*
* @param closeRequest a {@link java.lang.String} object.
*/
public void setExpectedClose(String closeRequest) {
m_lineConversation.setExpectedClose(closeRequest);
}
/**
* <p>setExpectedClose</p>
*
* @param closeRequest a {@link java.lang.String} object.
* @param closeResponse a {@link java.lang.String} object.
*/
public void setExpectedClose(String closeRequest, String closeResponse) {
m_lineConversation.setExpectedClose(closeRequest, closeResponse);
}
/**
* <p>getServerHandler</p>
*
* @return a {@link org.apache.mina.core.service.IoHandler} object.
*/
public IoHandler getServerHandler() {
return m_ioHandler != null ? m_ioHandler : new SimpleServerHandler(m_lineConversation);
}
/**
* <p>setServerHandler</p>
*
* @param handler a {@link org.apache.mina.core.service.IoHandler} object.
*/
public void setServerHandler(IoHandler handler) {
m_ioHandler = handler;
}
/**
* <p>setPort</p>
*
* @param port a int.
*/
public void setPort(int port) {
m_port = port;
}
/**
* <p>getPort</p>
*
* @return a int.
*/
public int getPort() {
return m_port;
}
/**
* <p>setBufferSize</p>
*
* @param bufferSize a int.
*/
public void setBufferSize(int bufferSize) {
m_bufferSize = bufferSize;
}
/**
* <p>getBufferSize</p>
*
* @return a int.
*/
public int getBufferSize() {
return m_bufferSize;
}
/**
* <p>setIdleTime</p>
*
* @param idleTime a int.
*/
public void setIdleTime(int idleTime) {
m_idleTime = idleTime;
}
/**
* <p>getIdleTime</p>
*
* @return a int.
*/
public int getIdleTime() {
return m_idleTime;
}
}