📄 appserver.java
字号:
/****************************************************************************
* Package : com.ecSolutions.ecAppServer.server
* File : AppServer.java
* Create Date : 2007-7-20
* Author : Steven Chen
*
* Copyright(C) 2006 ecSolutions(shanghai) Co.,Limited.All Rights Reserved.
*
***************************************************************************/
package com.ecSolutions.ecAppServer.server;
import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.net.UnknownHostException;
import java.nio.ByteBuffer;
import org.apache.log4j.Logger;
import com.ecSolutions.ecAppServer.Configuration;
import com.ecSolutions.ecAppServer.server.buffer.BufferFactory;
import com.ecSolutions.ecAppServer.server.handler.EcAppServerHandler;
import com.ecSolutions.ecAppServer.server.packet.DefaultPacket;
import com.ecSolutions.ecAppServer.server.session.SessionFactory;
import com.ecSolutions.ecAppServer.server.util.Charset;
/**
*
* @author Steven Chen
* @version $Id: AppServer.java,v 1.7 2007/07/30 02:59:02 stevenchen Exp $
*
*/
public class AppServer implements Runnable{
private static Logger log = Logger.getLogger("AppServer");
private Thread runner;
private boolean suspended;
private Configuration config;
private int port;
private String hostip;
private SessionAcceptor acceptor = SessionFactory.createSessionAcceptor(SessionType.TCP);
private static final byte[] TOKEN = System.getProperty("line.separator").getBytes();
/**
* constructor
* @param config
*/
public AppServer(Configuration config) {
this.config = config;
}
public void run() {
/*
InetAddress lh = null;
try {
lh = InetAddress.getLocalHost();
} catch (UnknownHostException e) {
log.error("host ip address is unkown or invalid!");
}*/
SocketAddress socketaddress = new InetSocketAddress(hostip,port);
acceptor.setListenAddress(socketaddress);
//acceptor.setListenPort(port);
final EcAppServerHandler handler = new EcAppServerHandler();
acceptor.setAcceptorHandler(
new SessionAcceptorHandlerAdapter() {
public void exceptionCaught(SessionAcceptor acceptor, Throwable cause) {
System.err.println(cause);
}
public void sessionAccepted(SessionAcceptor acceptor, Session session) throws Exception {
//session.setSessionHandler(handler);
session.setPacketDecoder(new MessageDecoder());
session.setPacketEncoder(new MessageEncoder());
//session.addSessionFilter(new ChatLogFilter());
session.setSessionHandler(handler);
session.start();
}
}
);
acceptor.start();
if (acceptor.isStarted())
System.out.println("ecAppServer listen on " + acceptor.getListenAddress());
}
public void start() throws Exception {
hostip = config.getString("HostIP");
port = config.getInt("Port",9000);
if(hostip.trim().equals("")){
System.out.println("host ip address is unkown or not set!");
log.error("host ip address is unkown or not set!");
System.exit(1);
}
if (runner == null) {
runner = new Thread(this);
runner.start();
System.out.println("Server ready ........");
log.info("------- ecAppServer started ------");
}else{
System.out.println("Server is Still Runing ........");
log.info("------- ecAppServer Still Runing ------");
}
}
/**
* 停止服务器
*/
public void stop() {
acceptor.close();
runner = null;
}
/**
* 返回服务器是否停止
*/
public boolean isStopped() {
return runner == null;
}
/**
* 挂起服务器,停止响应之后的客户端请求
*/
public void suspend() {
suspended = true;
}
/**
* 回复服务器运行
*/
public void resume() {
suspended = false;
}
/**
* 返回服务器是否挂起
*/
public boolean isSuspended() {
return suspended;
}
private static class MessageDecoder implements PacketDecoder {
public Object decode(Session session, Packet packet) throws Exception {
Buffer buffer = packet.getContent();
//buffer.asByteBuffer().
int index = buffer.indexOf(TOKEN);
if (index >= 0) {
String s = buffer.getString(Charset.SYSTEM, index
- buffer.position());
buffer.skip(TOKEN.length);
return s;
}
return null;
}
}
private static class MessageEncoder implements PacketEncoder {
public Packet encode(Session session, Object obj) throws Exception {
String s = (String) obj;
ByteBuffer buffer = Charset.SYSTEM.encode(s);
return new DefaultPacket(BufferFactory.allocate(buffer.remaining() + TOKEN.length).put(buffer).flip());
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -