package com.ls.tcpServer.controller;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;
import org.apache.log4j.Logger;
import com.ls.tcpServer.constant.Constants;
import com.ls.tcpServer.message.Message;
import com.ls.tcpServer.message.MessageHandler;
import com.ls.tcpServer.spring.SpringInfoCenter;
/**
*
* @Title: ControllerHandler.java
* @Description: controller处理类
* @author liusong
* @date 2014-12-5 下午3:51:39
*/
public class ControllerHandler {
private static ControllerHandler instance;
private static final Logger logger = Logger.getLogger(ControllerHandler.class);
private static Executor executor;
static {
try {
executor = Executors.newFixedThreadPool(Constants.WORKING_THREADS_NUM);
start();
logger.info("controller处理中心启动成功!");
} catch (Exception e) {
logger.fatal("controller分发线程池启动异常,退出系统", e);
System.exit(0);
}
}
private ControllerHandler() {
};
public static ControllerHandler getInstance() {
if (instance == null) {
synchronized (ControllerHandler.class) {
if (instance == null) {
instance = new ControllerHandler();
}
}
}
return instance;
}
private static void start() {
Runnable r = new Runnable() {
public void run() {
while (true) {
try {
Message take = MessageHandler.MESSAGES.take();
executor.execute(new ControllerRunnable(take));
} catch (Exception e) {
logger.error(e.getMessage(),e);
}
}
}
};
new Thread(r).start();
}
}
/**
*
* @Title: ControllerHandler.java
* @Description: 调用controller处理消息
* @author liusong
* @date 2014-12-5 下午4:16:38
*/
class ControllerRunnable implements Runnable {
private static final Logger logger = Logger.getLogger(ControllerRunnable.class);
private Message message;
private static final Controllers CONTROLLERS = (Controllers) SpringInfoCenter.getInstance().getBeanByName(
"controllers");
public ControllerRunnable(Message message) {
super();
this.message = message;
}
public void run() {
try {
IController c = CONTROLLERS.getControllerMap().get(message.getMsg().get("cmd"));
c.handleMessage(message.getSession(), message.getMsg());
} catch (Exception e) {
logger.error(e.getMessage(),e);
}
}
}
- 1
- 2
前往页