?? server.java
字號:
package com.gctech.cmpp3.server;
import java.util.*;
import java.io.*;
import EDU.oswego.cs.dl.util.concurrent.Executor;
import EDU.oswego.cs.dl.util.concurrent.ThreadedExecutor;
import org.apache.log4j.PropertyConfigurator;
import org.apache.log4j.Logger;
import com.gctech.cmpp3.msg.DeliverRequest;
import com.gctech.cmpp3.util.MsgLogger;
import com.gctech.util.net.ConcurrentServer;
/**
* <p>Title: 短信 API</p>
* <p>Description: 短信SP API</p>
* <p>Copyright: Copyright (c) 2004</p>
* <p>Company: GCTECH</p>
* @author 王紅寶
* @version $Id: Server.java,v 1.1 2004/05/21 07:50:11 wanghb Exp $
*/
public class Server implements Runnable{
Map services;
public void run(){
while ( true ){
try {
Thread.sleep(this.scanInterval);
}
catch (InterruptedException ex) {
logger.error(ex, ex);
return;
}
logger.debug("scanning for timeout connect");
for (Iterator it = services.values().iterator(); it.hasNext(); ) {
SpService service = (SpService) it.next();
service.activeTest();
}
}
}
private Server() {
services = new Hashtable();
}
private static Server singleton;
public static Server getInstance(){
if ( singleton == null )
singleton = new Server();
return singleton;
}
/**
* 發送上行信息。
* */
public void deliver(DeliverRequest request, String spId){
Object key = services.get(spId);
if ( key == null ){
logger.warn(spId +" not register,mo "+request +" cancel!");
return;
}
SpService service = (SpService)key;
MsgLogger.log(request);
service.send(request.toByteArray());
}
/**
* 發送狀態報告
* */
public void deliver(byte[] report, String spId){
Object key = services.get(spId);
if ( key == null ){
logger.warn(spId +" not register,report cancel!");
return;
}
SpService service = (SpService)key;
service.send(report);
}
/**
* 注冊服務。每個SP只能有一個連接。
* */
Object register(SpService service){
return services.put(service.sourceAddr, service);
}
/**
* 注銷服務。
* */
Object unregister(SpService service){
Object obj = services.get(service.sourceAddr);
if ( obj == null ){
return obj;
}else{
if ( obj == service )
return services.remove(service.sourceAddr);
else
return null;
}
}
public static void main(String[] args) {
String strFile = args[0];
PropertyConfigurator.configureAndWatch(args[0]);
try {
Properties props = new Properties();
InputStream in = new FileInputStream(strFile);
props.load(in);
in.close();
//啟動鏈路檢測線程
Server server = Server.getInstance();
server.setScanInterval(Integer.parseInt(props.getProperty("com.gctech.cmpp3.server.scanInterval")));
SpService.ACTIVE_TEST_INTERVAL = Long.parseLong(props.getProperty(
"com.gctech.cmpp3.server.activeInterval"));
SpService.TIME_OUT = Integer.parseInt(props.getProperty("com.gctech.cmpp3.server.timeout"));
Thread scanner = new Thread(server, "CMPP_SCANNER");
scanner.setDaemon(true);
scanner.start();
int port = Integer.parseInt(props.getProperty("com.gctech.cmpp3.server.port"));
//對于SP服務。每連接創建一新線程
Executor executor = new ThreadedExecutor();
//啟動CMPP_SERVER在port
logger.info("啟動CMPP服務器在端口:" + port);
ConcurrentServer conServer = new ConcurrentServer(port, "CMPP_SERVER",
"com.gctech.cmpp3.server.SpService", executor);
Thread t = new Thread(conServer, "CMPP_LISTENER");
t.start();
}
catch (IOException ex) {
ex.printStackTrace();
}
}
public void setScanInterval(long scanInterval) {
this.scanInterval = scanInterval;
}
static final Logger logger = Logger.getLogger(Server.class);
private long scanInterval;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -