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

📄 mm7sender.java

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

package com.cmcc.mm7.vasp.service;

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

public class MM7Sender
{
  private MM7Config mm7Config;
  private BufferedOutputStream sender;
  private BufferedInputStream receiver;
  private StringBuffer sb;
  private StringBuffer beforAuth;
  private String AuthInfor;
  private String DigestInfor;
  private StringBuffer afterAuth;
  private StringBuffer entityBody;
  private MM7RSRes res;
  private ByteArrayOutputStream baos;
  private ConnectionPool pool;
  private ConnectionWrap connWrap;
  private int ResendCount;
  private Socket client;
  private int ReadTimeOutCount = 0;
  private ByteArrayOutputStream sendBaos;
  private StringBuffer SevereBuffer;
  private StringBuffer InfoBuffer;
  private StringBuffer FinerBuffer;
  private ByteArrayOutputStream Severebaos;
  private ByteArrayOutputStream Infobaos;
  private ByteArrayOutputStream Finerbaos;
  private long LogTimeBZ;
  private long SameMinuteTime;
  private int N;
  private SimpleDateFormat sdf;
  private DecimalFormat df;
  private String logFileName;
  private byte[] TimeOutbCount;
  private ConnectionWrap TimeOutWrap;
  private boolean TimeOutFlag;
  public int tempnum = 0;

  public MM7Sender()  //构造方法
  {
    reset();
  }
  private void reset()
  {
    File f;
    mm7Config = new MM7Config();
    sender = null;
    receiver = null;
    AuthInfor = "";
    DigestInfor = "";
    sb = new StringBuffer();
    beforAuth = new StringBuffer();
    afterAuth = new StringBuffer();
    entityBody = new StringBuffer();
    res = new MM7RSRes();
    baos = new ByteArrayOutputStream();
    ResendCount = 0;
    connWrap = null;
    //Modify by hudm 2004-06-09
    //pool = ConnectionPool.getInstance();
    pool = new ConnectionPool();
    ///end Modify by hudm 2004-06-09
    client = null;
    sendBaos = new ByteArrayOutputStream();
    SevereBuffer = new StringBuffer();
    InfoBuffer = new StringBuffer();
    FinerBuffer = new StringBuffer();
    Severebaos = new ByteArrayOutputStream();
    Infobaos = new ByteArrayOutputStream();
    Finerbaos = new ByteArrayOutputStream();
    LogTimeBZ = System.currentTimeMillis();
    SameMinuteTime = System.currentTimeMillis();
    N = 1;
    sdf = new SimpleDateFormat("yyyyMMddHHmm");
    df = new DecimalFormat();
    df.applyLocalizedPattern("0000");
    logFileName = "";
    TimeOutbCount = null;
    TimeOutWrap = null;
    TimeOutFlag = false;
  }
  /**构造方法*/
  public MM7Sender(MM7Config config)  throws Exception
  {
    reset();
    mm7Config = config;
    pool.setConfig(mm7Config);
  }
  public void setConfig(MM7Config config)  //设置MM7Config
  {
    mm7Config = config;
    pool.setConfig(mm7Config);
  }
  public MM7Config getConfig()  //获得MM7Config
  {
    return(mm7Config);
  }

  private void setSameMinuteTime(long time)
  {
    SameMinuteTime = time;
  }
  private long getSameMinuteTime()
  {
    return SameMinuteTime;
  }

  public MM7RSRes send(MM7VASPReq mm7VASPReq)  //发送消息
  {
    tempnum++;
    sb = new StringBuffer();
    beforAuth = new StringBuffer();
    afterAuth = new StringBuffer();
    entityBody = new StringBuffer();
    sendBaos = new ByteArrayOutputStream();
    SevereBuffer = new StringBuffer();
    InfoBuffer = new StringBuffer();
    FinerBuffer = new StringBuffer();

    this.Severebaos = new ByteArrayOutputStream();
    this.Finerbaos = new ByteArrayOutputStream();
    this.Infobaos = new ByteArrayOutputStream();

    sender = null;
    receiver = null;
    //reset();

    SimpleDateFormat simple = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
    if(mm7VASPReq == null)
    {
      MM7RSErrorRes ErrorRes = new MM7RSErrorRes();
      ErrorRes.setStatusCode(-105);
      ErrorRes.setStatusText("待发送的消息为空!");
      SevereBuffer.append("[Message_Type=MM7RSErrorRes]");
      SevereBuffer.append("[Comments={"+ErrorRes.getStatusCode());
      SevereBuffer.append(";"+ErrorRes.getStatusText()+"}]");
      return ErrorRes;
    }
    try
    {
      String mmscURL = mm7Config.getMMSCURL();
      int httpindex = -1;
      int index = -1;
      if(mmscURL == null)
        mmscURL = "";
      beforAuth.append("POST " + mmscURL + " HTTP/1.1\r\n");
      /**为了当有多个MMSCIP时,可以进行平均分配*/
      if(pool.getIPCount()<mm7Config.getMMSCIP().size())
      {
        beforAuth.append("Host:" + (String) mm7Config.getMMSCIP().get(
            pool.getIPCount()) + "\r\n");
        pool.setIPCount(pool.getIPCount()+1);
      }
      else
      {
        pool.setIPCount(0);
        beforAuth.append("Host:"+(String)mm7Config.getMMSCIP().get(0)+"\r\n");
        pool.setIPCount(pool.getIPCount()+1);
      }
      //设置Host结束
      /**设置ContentType,不带附件为text/xml;带附件为multipart/related*/
      if(mm7VASPReq instanceof MM7SubmitReq)
      {
        MM7SubmitReq submitReq = (MM7SubmitReq)mm7VASPReq;
        InfoBuffer.append("[TransactionID="+submitReq.getTransactionID()+"]");
        InfoBuffer.append("[Message_Type=MM7SubmitReq]");
        InfoBuffer.append("[Sender_Address="+submitReq.getSenderAddress()+"]");
        InfoBuffer.append("[Recipient_Address={");
        if(submitReq.isToExist())
        {
          InfoBuffer.append("To={");
          List to = new ArrayList();
          to = submitReq.getTo();
          for(int i=0;i<to.size();i++)
          {
            InfoBuffer.append( (String) to.get(i) + ",");
          }
          InfoBuffer.append("}");
        }
        if(submitReq.isCcExist())
        {
           InfoBuffer.append("Cc={");
           List cc = new ArrayList();
           cc = submitReq.getCc();
           for(int i=0;i<cc.size();i++)
           {
             InfoBuffer.append( (String) cc.get(i) + ",");
           }
           InfoBuffer.append("}");
        }
        if(submitReq.isBccExist())
        {
           InfoBuffer.append("Bcc={");
           List bcc = new ArrayList();
           bcc = submitReq.getBcc();
           for(int i=0;i<bcc.size();i++)
           {
             InfoBuffer.append( (String) bcc.get(i) + ",");
           }
           InfoBuffer.append("}");
        }
        InfoBuffer.append("}]\r\n");
        if(submitReq.isContentExist())
          beforAuth.append("Content-Type:multipart/related; boundary=\"--NextPart_0_2817_24856\";"+
                           "type=\"text/xml\";start=\"</tnn-200102/mm7-vasp>\""+"\r\n");
        else
          beforAuth.append("Content-Type:text/xml;charset=\""+mm7Config.getCharSet()+"\""+"\r\n");
      }
      else if(mm7VASPReq instanceof MM7ReplaceReq)
      {
        MM7ReplaceReq replaceReq = (MM7ReplaceReq)mm7VASPReq;
        InfoBuffer.append("[TransactionID="+replaceReq.getTransactionID()+"]");
        InfoBuffer.append("[Message_Type=MM7ReplaceReq]\r\n");
        if(replaceReq.isContentExist())
          beforAuth.append("Content-Type:multipart/related; boundary=\"--NextPart_0_2817_24856\";"+"\r\n");
        else
          beforAuth.append("Content-Type:text/xml;charset=\""+mm7Config.getCharSet()+"\""+"\r\n");
      }
      else if(mm7VASPReq instanceof MM7CancelReq)
      {
        MM7CancelReq cancelReq = (MM7CancelReq)mm7VASPReq;
        InfoBuffer.append("[TransactionID="+cancelReq.getTransactionID()+"]");
        InfoBuffer.append("[Message_Type=MM7CancelReq]\r\n");
        beforAuth.append("Content-Type:text/xml;charset=\""+mm7Config.getCharSet()+"\""+"\r\n");
      }
      else
      {
        MM7RSErrorRes ErrorRes = new MM7RSErrorRes();
        ErrorRes.setStatusCode( -106);
        ErrorRes.setStatusText("没有匹配的消息,请确认要发送的消息是否正确!");
        SevereBuffer.append("[Message_Type=MM7RSErrorRes]");
        SevereBuffer.append("[Comments={"+ErrorRes.getStatusCode());
        SevereBuffer.append(";"+ErrorRes.getStatusText()+"}]");
        return ErrorRes;
      }
      //设置ContentType结束
      //设置Content-Trans-Encoding
      beforAuth.append("Content-Transfer-Encoding:8bit" + "\r\n");
       AuthInfor = "Authorization:Basic " +
              getBASE64(mm7Config.getUserName() + ":" +
                        mm7Config.getPassword()) + "\r\n";

      afterAuth.append("SOAPAction:\"\""+"\r\n");
      RetriveApiVersion apiver = new RetriveApiVersion();
      afterAuth.append("MM7APIVersion:"+apiver.getApiVersion()+"\r\n");
      /**判断是否是长连接,若是长连接,则将Connection设为keep-alive,
       * 否则设为close,以告诉服务器端客户端是长连接还是短连接*/
      if(pool.getKeepAlive().equals("on"))
      {
        afterAuth.append("Connection: Keep-Alive" + "\r\n");
      }
      else
      {
        afterAuth.append("Connection:Close" + "\r\n");
      }

      byte[] bcontent = getContent(mm7VASPReq);
      if(bcontent.length>mm7Config.getMaxMsgSize())
      {
        MM7RSErrorRes ErrorRes = new MM7RSErrorRes();
        ErrorRes.setStatusCode( -113);
        ErrorRes.setStatusText("消息内容的尺寸超出允许发送的大小!");
        SevereBuffer.append("[Message_Type=MM7RSErrorRes]");
        SevereBuffer.append("[Comments={" + ErrorRes.getStatusCode());
        SevereBuffer.append(";" + ErrorRes.getStatusText() + "}]");
        return ErrorRes;
      }
      this.TimeOutbCount = bcontent;
      String env = "";
      try{
        ByteArrayOutputStream tempbaos = new ByteArrayOutputStream();
        tempbaos.write(bcontent);
        int envbeg = tempbaos.toString().indexOf(MMConstants.BEGINXMLFLAG);
        int envend = tempbaos.toString().indexOf("</env:Envelope>");
        env = tempbaos.toString().substring(envbeg,envend);
        env = env + "</env:Envelope>";
      }catch(IOException ioe)
      {
        ioe.printStackTrace();
      }
      finally{
        //设置消息体长度
        afterAuth.append("Content-Length:" + bcontent.length + "\r\n");
        afterAuth.append("Mime-Version:1.0" + "\r\n");
        afterAuth.append("\r\n");
        entityBody.append(new String(bcontent));
        sendBaos = getSendMessage(bcontent);
        String time = "[" + simple.format(new Date(System.currentTimeMillis())) +
            "]";
        if (sendBaos != null) {
          res = SendandReceiveMessage(sendBaos);
        }
        else {
          MM7RSErrorRes ErrorRes = new MM7RSErrorRes();
          ErrorRes.setStatusCode( -104);
          ErrorRes.setStatusText("Socket不通!");
          SevereBuffer.append("[Message_Type=MM7RSErrorRes]");
          SevereBuffer.append("[Comments={" + ErrorRes.getStatusCode());
          SevereBuffer.append(";" + ErrorRes.getStatusText() + "}]");
          return ErrorRes;
        }

        FinerBuffer.append(InfoBuffer);
        InfoBuffer.append(env);
        SevereBuffer.insert(0, "\r\n\r\n" + time + "[1]");
        InfoBuffer.insert(0, "\r\n\r\n" + time + "[3]");
        FinerBuffer.insert(0, "\r\n\r\n" + time + "[6]");

        Severebaos.write(SevereBuffer.toString().getBytes());
        Infobaos.write(SevereBuffer.toString().getBytes());
        Infobaos.write(InfoBuffer.toString().getBytes());
        Finerbaos.write(SevereBuffer.toString().getBytes());
        Finerbaos.write(InfoBuffer.toString().getBytes());
        Finerbaos.write(FinerBuffer.toString().getBytes());
        Finerbaos.write(bcontent);

        /*************/
        InfoBuffer = new StringBuffer();
        FinerBuffer = new StringBuffer();
        time = "[" + simple.format(new Date(System.currentTimeMillis())) + "]";
        InfoBuffer.append("\r\n\r\n" + time + "[3]");
        FinerBuffer.append("\r\n\r\n" + time + "[6]");
        InfoBuffer.append("[TransactionID=" + res.getTransactionID() + "]");
        FinerBuffer.append("[TransactionID=" + res.getTransactionID() + "]");
        if (res instanceof MM7SubmitRes) {
          InfoBuffer.append("[Message_Type=MM7SubmitRes]");
          FinerBuffer.append("[Message_Type=MM7SubmitRes]");
        }
        else if (res instanceof MM7CancelRes) {
          InfoBuffer.append("[Message_Type=MM7CancelRes]");
          FinerBuffer.append("[Message_Type=MM7CancelRes]");
        }
        else if (res instanceof MM7ReplaceRes) {
          InfoBuffer.append("[Message_Type=MM7ReplaceRes]");
          FinerBuffer.append("[Message_Type=MM7ReplaceRes]");
        }
        else if (res instanceof MM7RSErrorRes) {
          InfoBuffer.append("[Message_Type=MM7RSErrorRes]");

⌨️ 快捷键说明

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