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

📄 server.java

📁 采用JAVA开发
💻 JAVA
字号:
package com.gctech.cmpp.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.cmpp.msg.DeliverRequest;
import com.gctech.cmpp.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.cmpp.server.scanInterval")));
      SpService.ACTIVE_TEST_INTERVAL = Long.parseLong(props.getProperty(
          "com.gctech.cmpp.server.activeInterval"));
      SpService.TIME_OUT = Integer.parseInt(props.getProperty("com.gctech.cmpp.server.timeout"));
      Thread scanner = new Thread(server, "CMPP_SCANNER");
      scanner.setDaemon(true);
      scanner.start();
      int port = Integer.parseInt(props.getProperty("com.gctech.cmpp.server.port"));
      //对于SP服务。每连接创建一新线程
      Executor executor = new ThreadedExecutor();
      //启动CMPP_SERVER在port
      logger.info("启动CMPP服务器在端口:" + port);
      ConcurrentServer conServer = new ConcurrentServer(port, "CMPP_SERVER",
          "com.gctech.cmpp.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 + -