⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 server.java

📁 采用JAVA开发
💻 JAVA
字号:
package com.gctech.sms.platform;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.StringTokenizer;
import java.util.Vector;

import org.apache.log4j.Logger;

import EDU.oswego.cs.dl.util.concurrent.Executor;
import EDU.oswego.cs.dl.util.concurrent.ThreadedExecutor;

import com.gctech.sms.SmsException;
import com.gctech.sms.app.AppReceiver;
import com.gctech.sms.msg.GatewayType;
import com.gctech.sms.msg.MTAck;
import com.gctech.sms.msg.MTInfo;
import com.gctech.sms.tj.ReadMTPool;
import com.gctech.sms.util.ConnectionManager;
import com.gctech.sms.util.ThreadManager;
import com.gctech.util.Startable;
import com.gctech.util.net.AbstractConcurrentServer;
import com.gctech.util.net.ConcurrentServer;

/**
 * 短信平台
 * <p>短信平台</p>
 * <p>建立mo、mt、管理线程 </p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Company: TOL24.com</p>
 * @author not attributable
 * @version $Id: Server.java,v 1.4 2004/05/24 01:08:01 wanghb Exp $
 */

public class Server {

	private List servers;
	private String fileName = "./conf/server.properties";
	public static final String CONFIG_PREFIX = "gcsms.server.";

	private Map moGateway = null;
	private Map mtGateway = null;
	private Map mtList;
	/**
	 * 根据下行回复移除一个下行信息。
	 * */
	public Object removeMt(MTAck key) {
		return mtList.remove(key.msgId);
	}

	/**
	 * 发送消息,并记录到已发送列表。
	 * */
	public int sentMt(MTInfo info, int gateway) {
		//业务修改,移动和联通都发到移动网关 2004-4-26 wjl change
		//Object obj = mtGateway.get(new Integer(info.gateway));
		Object obj = mtGateway.get(new Integer(gateway));
		if (obj == null)
			return Constants.GATE_WAY_COMMUNICATION_ERROR;
		System.out.println("gateway:" + gateway);
		MTSender sender = (MTSender) obj;
		try {
			mtList.put(info.MsgID, info);
			sender.sendMt(info);
			return 0;
		} catch (IOException ex) {
			logger.error(ex, ex);
			mtList.remove(info.MsgID);
			return Constants.GATE_WAY_COMMUNICATION_ERROR;
		}
	}

	/**
	 * 得到已经注册的网关信息。
	 * */
	public Collection gateWayInfo() {
		Collection col = new Vector();
		for (Iterator it = moGateway.values().iterator(); it.hasNext();) {
			LongSockService service = (LongSockService) it.next();
			col.add(service.getMoi());
		}
		for (Iterator it = mtGateway.values().iterator(); it.hasNext();) {
			LongSockService service = (LongSockService) it.next();
			col.add(service.getMoi());
		}
		return col;
	}

	/**
	 * 注册网关。
	 * */
	public Object regGateway(int type, int gateway, LongSockService info) {
		Integer key = new Integer(gateway);
		if (type == GatewayType.MT)
			return mtGateway.put(key, info);
		else
			return moGateway.put(key, info);
	}
	/**
	 * 注销网关。
	 * */
	public Object unregGateway(int type, int gateway) {
		Integer key = new Integer(gateway);
		if (type == GatewayType.MT)
			return mtGateway.remove(key);
		else
			return moGateway.remove(key);
	}
	public int restart() {
		shutdown();
		return startup();
	}
	//private Map mAllMtInfo;
	/**
	 * 停止服务器。
	 * */
	public int shutdown() {
		//关闭服务器
		for (Iterator it = servers.iterator(); it.hasNext();) {
			ConcurrentServer server = (ConcurrentServer) it.next();
			try {
				server.close();
			} catch (Throwable ex1) {
				logger.error(ex1, ex1);
			}
		}
		//关闭连接池。
		ConnectionManager.getInstance().close();
		//关闭线程池。
		ThreadManager.getInstance().shutdownNow();
		//清除已发送列表。
		mtList.clear();
		//singleton = null;
		return 0;
	}
	/**
	 * 启动服务器。
	 * */
	private int startup() {
		//载入配置
		try {
			//启动注册的服务
			Properties props = new Properties();
			InputStream in = new FileInputStream(fileName);
			props.load(in);
			in.close();
			//启动连接池
			try {
				String dbcpFileName = props.getProperty(CONFIG_PREFIX + "dbcpFileName");
				ConnectionManager.getInstance().init(dbcpFileName);
			} catch (SmsException ex) {
				logger.fatal(ex, ex);
				return -1;
			}
			//载入线程池
			ThreadManager.getInstance().loadThreadPool(props);

			servers = new Vector();
			StringTokenizer stk = new StringTokenizer(props.getProperty("gcsms.server"), ",");
			AbstractConcurrentServer server = null;
			for (; stk.hasMoreTokens();) {
				String svName = stk.nextToken();
				String type = props.getProperty(CONFIG_PREFIX + svName + ".type");
				int port = Integer.parseInt(props.getProperty(CONFIG_PREFIX + svName + ".port"));
				if (type.equals("ConcurrentServer")) {
					//启动服务
					String className = props.getProperty(CONFIG_PREFIX + svName + ".service");
					String executor = props.getProperty(CONFIG_PREFIX + svName + ".executor");
					if ("APPReceiver".equals(svName))
						//载入应用层服务
						AppReceiver.loadServices(props);
					server = loadService(port, svName, className, executor);
				} else {
					logger.warn("不能找到这种服务器类型" + type);
					continue;
				}
				servers.add(server);
			}
			//启动日志服务
			MyLogger.getInstance();
			//启动配置的启动服务。
			String starters = props.getProperty("com.gctech.sms.starter");
			if (starters != null) {
				stk = new StringTokenizer(starters, ",");
				for (; stk.hasMoreTokens();) {
					String className = props.getProperty("com.gctech.sms.starter." + stk.nextToken() + ".className");
					Startable stb = (Startable) Class.forName(className).newInstance();
					stb.start(props);
				}
			}
			//启动测试线程
			ReadMTPool mtpool = new ReadMTPool(2);
		} catch (Exception ex1) {
			logger.error(ex1, ex1);
			return 1;
		}
		return 0;
	}

	private Server() {
		moGateway = new HashMap();
		mtGateway = new HashMap();
		mtList = new HashMap();

		/*int startup = startup();
		if ( startup == 0 ){
		}else{
		  System.exit(startup);
		}*/
	}

	public void init(String fileName) {
		this.fileName = fileName;
		int startup = startup();
		if (startup == 0) {
		} else {
			System.exit(startup);
		}
	}
	private static Server singleton;
	public static Server getInstance() {
		if (singleton == null)
			singleton = new Server();
		return singleton;
	}

	ConcurrentServer loadService(int port, String serviceName, String serviceClass, String executor) throws InterruptedException {
		Executor theExcecutor = null;

		if (executor == null || executor.equals("ThreadedExecutor")) {
			theExcecutor = new ThreadedExecutor();
		} else {
			theExcecutor = ThreadManager.getInstance().getExcecutor();
		}
		ConcurrentServer server = new ConcurrentServer(port, serviceName, serviceClass, theExcecutor);

		Thread t = new Thread(server, serviceName);
		t.start();
		return server;
	}
	static final Logger logger = Logger.getLogger(Server.class);
	public static void main(String[] args) {
		StringTokenizer stk = new StringTokenizer("SPReciever,APPReceiver,MTSender,MOReceiver");
		for (; stk.hasMoreTokens();) {
			String svName = stk.nextToken();
			// System.out.println(svName);
		}
	}
}

⌨️ 快捷键说明

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