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

📄 mm7receiver.java

📁 中国移动彩信中心MM7接口统一API mm7api
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/**File Name:MM7Receiver.java
 * Company:  中国移动集团公司
 * Date  :   2004-2-17
 * */

package com.cmcc.mm7.vasp.service;

import java.net.*;
import java.io.*;
import java.text.*;
import java.util.*;
import sun.misc.*;
import java.security.*;
import com.cmcc.mm7.vasp.message.*;
import com.cmcc.mm7.vasp.conf.*;
import com.cmcc.mm7.vasp.common.*;
import util.concurrent.*;

public class MM7Receiver implements MM7AbstractReceiver
{
  protected MM7Config Config;
  private int port;
  private InetAddress ip;
  private int maxLongLinkNumber;
  private Thread ListenThread = null;
  private ServerSocket SSocket;
  private int BackLog;
  private int ConnectCounts = 0;
  private long receiveNumber = 1;
  private ByteArrayOutputStream Finerbaos;
  private StringBuffer TempBuffer;
  private StringBuffer SevereBuffer;
  private StringBuffer InfoBuffer;
  private StringBuffer FinerBuffer;
  private SimpleDateFormat sdf;
  private SimpleDateFormat Recordsdf;
  private long LogTimeBZ;
  private long SameMinuteTime;
  private int SameMMSCID;
  private String MMSCID;
  private int N;
  private DecimalFormat df;
  private String logFileName;
  private String strEnvelope;
  Socket CSocket;
  private boolean LongLinkFlag;
  private boolean isStop;

  public MM7Receiver()  //构造方法
  {
    reset();
    port = 80;
    maxLongLinkNumber = 20;
    BackLog = 50;
    try{
      ip = InetAddress.getLocalHost();
    }catch(UnknownHostException uhe){
      System.err.println("没有激活的TCP/IP配置!"+uhe);
       SevereBuffer.append("[没有激活的TCP/IP配置!原因:"+uhe+"]");
   }
    catch(Exception e){
      System.err.println(e);
       SevereBuffer.append("[错误!原因:"+e+"]");
   }
  }
  private void reset()
  {
    port = 80;
    maxLongLinkNumber = 20;
    BackLog = 50;
    Finerbaos = new ByteArrayOutputStream();
    TempBuffer = new StringBuffer();
    SevereBuffer = new StringBuffer();
    InfoBuffer = new StringBuffer();
    FinerBuffer = new StringBuffer();
    LogTimeBZ = System.currentTimeMillis();
    SameMinuteTime = System.currentTimeMillis();
    sdf = new SimpleDateFormat("yyyyMMddHHmm");
    df = new DecimalFormat("0000");
    N = 0;
    SameMMSCID = 0;
    logFileName = "";
    strEnvelope = "";
    Recordsdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    isStop = false;
  }

  public MM7Receiver(MM7Config config)  //构造方法
  {
    reset();
    Config = config;
    ConnectionPool pool = ConnectionPool.getInstance();
    pool.setConfig(config);
    String strKeepAlive = pool.getKeepAlive();
    if(strKeepAlive.equalsIgnoreCase("on"))
      this.setLongLink(true);
    else
      this.setLongLink(false);
    maxLongLinkNumber = pool.getServerMaxSize();
    port = Config.getListenPort();
    try{
      ip = InetAddress.getByName(Config.getListenIP());
    }catch(Exception e){
      e.printStackTrace();
      SevereBuffer.append("[错误!原因:"+e+"]");
   }
    BackLog = Config.getBackLog();
  }

  private void setSameMinuteTime(long time)
  {
    SameMinuteTime = time;
  }
  private long getSameMinuteTime()
  {
    return SameMinuteTime;
  }
  private void setSameMMSCID(int mmscid)
  {
    SameMMSCID = mmscid;
  }
  private int getSameMMSCID()
  {
    return SameMMSCID;
  }

  private void setLongLink(boolean longflag)
  {
    LongLinkFlag = longflag;
  }

  private boolean getLongLink()
  {
    return LongLinkFlag;
  }


  public void setConfig(MM7Config config)  //设置MM7Config
  {
    this.Config = config;
    ConnectionPool pool = ConnectionPool.getInstance();
    pool.setConfig(config);
    String strKeepAlive = pool.getKeepAlive();
    if(strKeepAlive.equalsIgnoreCase("on"))
      this.setLongLink(true);
    else
      this.setLongLink(false);
    maxLongLinkNumber = pool.getServerMaxSize();
    port = Config.getListenPort();
    try{
      ip = InetAddress.getByName(Config.getListenIP());
    }catch(Exception e){
      e.printStackTrace();
      SevereBuffer.append("[错误!原因:"+e+"]");
   }
    BackLog = Config.getBackLog();
  }
  public MM7Config getConfig()  //获得MM7Config
  {
    return(this.Config);
  }
  public void start()  //启动接收器
  {
    try{
      SSocket = new ServerSocket(port,BackLog,ip);
    }catch(UnknownHostException uhe){
      System.err.println("该计算机没有连接上DNS服务器或主机没有找到!"+uhe);
      SevereBuffer.append("[该计算机没有连接上DNS服务器或主机没有找到!"+uhe+"]");
   }
    catch(Exception e){
      String msg = e.getMessage();
      if(msg.indexOf("Address already in use") != -1)
        msg = "端口号已经被占用。";
      String errorMessage = "不能绑定到端口号:"+port+";原因:"+msg;
      System.err.println(errorMessage);
      SevereBuffer.append("["+errorMessage+"]");
      return;
    }

    if(ListenThread != null)
      ListenThread.setName("stop");
    ListenThread = new Thread("MM7-Listen")
    {
      public void run()
      {
        /*PooledExecutor poolexe = new PooledExecutor(new BoundedBuffer(10),50);
        poolexe.setMinimumPoolSize(5);
        poolexe.createThreads(5);
        poolexe.setKeepAliveTime(1600);
        poolexe.waitWhenBlocked();*/
        try
        {
          //等待连接
          while(1>0)
          {
            //System.out.println("进入这里!");
            //SevereBuffer.append("\r\n进入这里!");
             /*PooledExecutor poolexe = new PooledExecutor(50);
             poolexe.setMinimumPoolSize(5);
             poolexe.createThreads(5);
             poolexe.setKeepAliveTime(1600);
             poolexe.waitWhenBlocked();*/
            if(!isStop)
            {
              try {
                //System.out.println("poolexe.getPoolSize()="+poolexe.getPoolSize());
                //SevereBuffer.append("poolexe.getPoolSize()="+poolexe.getPoolSize()+"\r\n");
                //SevereBuffer.append("enter this! ");
                if(!SSocket.isClosed())
                {
                  CSocket = SSocket.accept();
                  ServiceConnect(CSocket, 1);
                  /*poolexe.execute(new Runnable() {
                    public void run() {
                      try {
                        ServiceConnect(CSocket, 1);
                      }
                      catch (Exception e) {}
                    }
                  });*/
                }
              }
              catch (Exception e) {
                SevereBuffer.append("inner.Exception:" + e);
              }
            }
          }
        }
        catch(Exception e)
        {
          SevereBuffer.append("outer.Exception:"+e);
        }
        finally
        {
          try
          {
            /*if(poolexe != null)
              poolexe.shutdownAfterProcessingCurrentlyQueuedTasks();*/
            if(SSocket != null)
              SSocket.close();
          }
          catch(Exception e)
          {
            SevereBuffer.append("SSocket不能被close.原因:"+e);
          }
        }
        //System.out.println("结束监听线程的运行\n");
      }
    };
    ListenThread.setDaemon(true);
    ListenThread.start();
  }
  public void stop()  //停止接收器
  {
    isStop = true;
    /*try
    {
      if(ListenThread.isAlive())
        ListenThread.destroy();
      if(SSocket != null)
        SSocket.close();
    }
    catch(Exception e)
    {
      SevereBuffer.append("stop().SSocket不能被close.原因:"+e);
    }*/
  }
  //处理到VASP的传送(deliver)多媒体消息
  public MM7VASPRes doDeliver(MM7DeliverReq mm7DeliverReq)
  {
    MM7DeliverRes res = new MM7DeliverRes();
    res.setTransactionID(mm7DeliverReq.getTransactionID());
    res.setStatusCode(1000);
    return res;
  }

  public MM7VASPRes doDeliveryReport(MM7DeliveryReportReq mm7DeliveryReportReq)
  {
    MM7DeliveryReportRes res = new MM7DeliveryReportRes();
    res.setTransactionID(mm7DeliveryReportReq.getTransactionID());
    res.setStatusCode(1000);
    return res;
  }
  //抽象方法。处理到VASP的读后回复报告
  public MM7VASPRes doReadReply(MM7ReadReplyReq mm7ReadReplyReq)
  {
    MM7ReadReplyRes res = new MM7ReadReplyRes();
    res.setTransactionID(mm7ReadReplyReq.getTransactionID());
    res.setStatusCode(1000);
    return res;
  }

  private void WriteLog(String MMSCID)
  {
    try{
      int logLevel = Config.getLogLevel();
      String LogPath = Config.getLogPath();
      int LogNum = Config.getLogNum();
      int LogInterval = Config.getLogInterval();
      int LogSize = Config.getLogSize();
      long Interval = System.currentTimeMillis() - LogTimeBZ;
      String sTimeNow = sdf.format(new Date(System.currentTimeMillis()));
      long timeNow, timeFile = 0;
      timeNow = sdf.parse(sTimeNow).getTime();
      if (logFileName.length() > 0) {
        File logFile = new File(logFileName);
        int index1 = logFileName.indexOf(Config.getMmscId() + "_");
        int index11 = index1 + Config.getMmscId().length() + 1;
        int index2 = logFileName.indexOf(".", index11);
        String sTimeFile = logFileName.substring(index1 +
                                                 Config.getMmscId().length() +
                                                 1, index2);
        timeFile = sdf.parse(sTimeFile).getTime();

        if (timeNow - timeFile > (long) LogInterval * 60 * 1000) {
          N = 1;
          this.deleteFile(LogPath, LogNum, Config.getMmscId());
          logFileName = LogPath + "/" + Config.getMmscId() + "_" +
              sTimeNow + "." + df.format(N) + ".log";
        }
        else {
          if (logFile.length() > LogSize * 1024) {
            if (N < LogNum)
              N++;
            else
              N = 1;
            this.deleteFile(LogPath, LogNum, Config.getMmscId());
            logFileName = LogPath + "/" + Config.getMmscId() + "_" +
                sTimeFile + "." + df.format(N) + ".log";
          }
        }
      }
      else {
        N = 1;
        this.deleteFile(LogPath, LogNum, Config.getMmscId());
        logFileName = LogPath + "/" + Config.getMmscId() + "_" +
            sTimeNow +
            "." + df.format(N) + ".log";
      }
      switch (logLevel) {
        case 1:
          try {
            FileOutputStream fos = new FileOutputStream(logFileName, true);
            fos.write(SevereBuffer.toString().getBytes());
            fos.close();
            SevereBuffer = new StringBuffer();
          }
          catch (IOException ioe) {
            ioe.printStackTrace();
          }
          break;
        case 2:
          break;
        case 3:
          try {
            FileOutputStream fos = new FileOutputStream(logFileName, true);
            if (SevereBuffer != null && SevereBuffer.length() > 0)
              fos.write(SevereBuffer.toString().getBytes());
            if (InfoBuffer != null && InfoBuffer.length() > 0)
              fos.write(InfoBuffer.toString().getBytes());
            fos.close();
            SevereBuffer = new StringBuffer();
            InfoBuffer = new StringBuffer();
          }
          catch (IOException ioe) {
            ioe.printStackTrace();
          }
          break;
        case 4:
          break;
        case 6:
          try {
            FileOutputStream fos = new FileOutputStream(logFileName, true);
            if(fos != null){
              if (SevereBuffer != null && SevereBuffer.length() > 0)
                fos.write(SevereBuffer.toString().getBytes());
              if (InfoBuffer != null && InfoBuffer.length() > 0)
                fos.write(InfoBuffer.toString().getBytes());
              if (Finerbaos != null && Finerbaos.size() > 0)
                fos.write(Finerbaos.toByteArray());
              fos.close();
              SevereBuffer = new StringBuffer();
              InfoBuffer = new StringBuffer();
              Finerbaos = new ByteArrayOutputStream();
            }
          }
          catch (IOException ioe) {
            ioe.printStackTrace();
          }
          break;
        case 7:
          break;
        default:
          break;
      }
    }catch(Exception e){}
    /*int LogLevel = Config.getLogLevel();
    String LogPath = Config.getLogPath();
    int LogNum = Config.getLogNum();
    int LogInterval = Config.getLogInterval();
    int LogSize = Config.getLogSize();
    long Interval = System.currentTimeMillis() - LogTimeBZ;
    FileOutputStream fos = null;
    SimpleDateFormat simpledf = new SimpleDateFormat("yyyyMMddHHmm");
    String temptime = simpledf.format(new Date(System.currentTimeMillis()));
    long timeNow = 0;
    try{
      timeNow = simpledf.parse(temptime).getTime();
    }catch(ParseException pe){
      pe.printStackTrace();
    }

    if(logFileName.length() > 0)
    {
      File logFile = new File(logFileName);
      int index1 = logFileName.indexOf(MMSCID+"_");
      int index11 = index1 + MMSCID.length()+1;
      int index2 = logFileName.indexOf(".",index11+1);
      String strtimeFile = logFileName.substring(index11,index2);
      long timeFile = 0;
      try{
        timeFile = simpledf.parse(strtimeFile).getTime();

⌨️ 快捷键说明

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