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

📄 cmccmm7senderthread.java

📁 MM7彩信对接网关示例
💻 JAVA
字号:
/*
 * Created on 2005-3-17
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package com.rainbow.mms.gateway;


import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;

import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import log.DailyMessageLog;

import org.apache.log4j.Logger;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.cmcc.mm7.vasp.common.MMConstants;
import com.cmcc.mm7.vasp.common.MMContent;
import com.cmcc.mm7.vasp.conf.MM7Config;
import com.cmcc.mm7.vasp.message.MM7RSErrorRes;
import com.cmcc.mm7.vasp.message.MM7RSRes;
import com.cmcc.mm7.vasp.message.MM7SubmitReq;
import com.cmcc.mm7.vasp.message.MM7SubmitRes;
import com.cmcc.mm7.vasp.service.MM7Sender;
import com.rainbow.mms.common.CMCCMM7SubmitMsg;
import com.rainbow.mms.common.MimeContent;
import com.rainbow.mms.common.MmsContent;
import com.rainbow.util.tools.HibernateUtil;


/**
 * 中国移动MM7平台的发送者线程
 * @author Rainbow MMS Group Leader —— TrWorks
 *
 */
class CMCCMM7SenderThread extends SenderThread {

	/**
	 * 中国移动MM7平台的发送API
	 */
	private MM7Sender sender = null;

	/**
	 * 配置文件
	 */
	private MM7Config mm7Config = null;
	
	/**
	 * 帐单,记录发送的Submit日志
	 */
	private DailyMessageLog bill = new DailyMessageLog();
	
	/**
	 * 日志
	 */
	private Logger log = Logger.getLogger(CMCCMM7SenderThread.class);

	/**
	 * 统计发送次数的信息
	 */
	private SenderStaticInfo staticInfo = SenderStaticInfo.getInstance();
	
	/**
	 * 构造函数
	 */
	public CMCCMM7SenderThread(){
		bill.setLogFile("bill/mmssendbill");
		bill.init();
		mm7Config = new MM7Config("./conf/mm7Config.xml");
		mm7Config.setConnConfigName("./conf/ConnConfig.xml");
		
		try {
			sender = new MM7Sender(mm7Config);
		} catch (Exception e) {
			e.printStackTrace();
			log.error("构造API的MM7Sener时出现错误!");
		}
	}
	
	/**
	 * 将彩信Submit消息发送出去
	 */
	protected void sendSubmitMessage(Object o) {

		// 参数检查
		if ((o == null) || (o instanceof CMCCMM7SubmitMsg == false)) {
			log.error("sendSumitMessage遇到的输入参数非法:为null或者类型不是CMCCMM7SubmitMsg");
			return;
		}
		
		// 将o转换为指定平台的彩信Submit消息类型
		MM7SubmitReq req = new MM7SubmitReq();
		CMCCMM7SubmitMsg mmsSubmit = (CMCCMM7SubmitMsg) o;
		MmsContent mmsContent = mmsSubmit.getContent();
		MMContent content = new MMContent();
		
		try {
			Session sess = HibernateUtil.currentSession();

			if (mmsContent != null) {
				// 将内部协议的彩信内容体转换为移动API协议
				for (int i = 0; i < mmsContent.getMmsContentElments().size(); i++) {
					MMContent element = null;
					MimeContent mimeElement = (MimeContent) mmsContent
							.getMmsContentElments().get(i);
					
//					// 解决编码问题
//					if (mimeElement.getMimeType().length() >= "text/plain".length()
//							&& 0 == mimeElement.getMimeType().trim().compareToIgnoreCase("text/plain")){
//						String textContent = mimeElement.getCharacterContent();
//						textContent = new String(textContent.getBytes("UTF-8"));
//						element.createFromString(textContent);
//					}
//					else{
						// 如果多媒体元素是图片类型,那么需要针对手机进行适配
						if (mimeElement.getMimeType().length() > 3
								&& 0 == mimeElement.getMimeType().substring(0, 3)
										.compareToIgnoreCase("ima")) {
							ByteArrayInputStream in = new ByteArrayInputStream(
									mimeElement.getBinaryContent());
							ByteArrayOutputStream out = new ByteArrayOutputStream();
							StringBuffer newPicType = new StringBuffer();
							// 如果图片发生了转换,那么需要重新设定这个mime元素的内容和类型
							if (true == SenderUserAgent.doUserAgent(in, mimeElement
									.getMimeType(), mmsSubmit.getDstNum(),
									newPicType, out)) {
								mimeElement.setBinaryContent(out.toByteArray());
								//System.out.println("newType:" +
								// newPicType.toString());
								mimeElement.setMimeType(newPicType.toString());
							}
	
							try {
								in.close();
								out.close();
							} catch (IOException e1) {
								e1.printStackTrace();
							}
	
						}

						InputStream in = null;
						if (mimeElement.getBinaryContent() == null
								&& mimeElement.getCharacterContent() != null) {
							element = MMContent.createFromString(mimeElement
									.getCharacterContent());
						} else if (mimeElement.getBinaryContent() != null
								&& mimeElement.getCharacterContent() == null) {
							element = MMContent.createFromBytes(mimeElement
									.getBinaryContent());
						} else {
							element = MMContent.createFromBytes(mimeElement
									.getBinaryContent());
						}
//					}

					if (element != null) {
						element.setContentID(mimeElement.getMimeContentName());
						element.setContentLocation(mimeElement
								.getMimeContentName());
						element.setContentType(mimeElement.getMimeType());
						// 将子元素添加到彩信内容体中
						content.addSubContent(element);
						content
								.setContentType(MMConstants.ContentType.MULTIPART_MIXED);

						// 如果设置了SMIL,那么需要做特殊的处理,设置内容为有序且设置SMIL为第一个彩信子内容
						if (mimeElement.getMimeType().equalsIgnoreCase(
								"application/smil")) {
							//content.setPresentionContent(element);
							content
									.setContentType(MMConstants.ContentType.MULTIPART_RELATED);
						}
					}
				}
			}
		} catch (Exception e) {
			log.error(e);
		} finally {
			HibernateUtil.closeSession();
		}
		
		req.setTransactionID(String.valueOf(mmsSubmit.getSubmitID()));
		req.setChargedParty((byte)4);
		req.setChargedPartyID(mmsSubmit.getFeeNum());
		req.setContent(content);
		req.setDeliveryReport(mmsSubmit.getWantReport()==0 ? false : true);
		req.setReadReply(mmsSubmit.getWantRead() == 0 ? false : true);
		Date expectSendTime = mmsSubmit.getExpectSendTime();
		if (expectSendTime != null){
			req.setEarliestDeliveryTime(expectSendTime);
		}
		Date expectExpiryTime = mmsSubmit.getExpectExpiryTime();
		if (expectExpiryTime != null){
			req.setExpiryDate(expectExpiryTime);
		}
		req.setPriority(MMConstants.Priority.NORMAL);
/*		int nMsgClass = mmsSubmit.getMsgClass();
		if (nMsgClass == 0) {
			req.setMessageClass(MMConstants.MessageClass.AUTO);
		} else if (nMsgClass == 1) {
			req.setMessageClass(MMConstants.MessageClass.PERSONAL);
		} else if (nMsgClass == 2) {
			req.setMessageClass(MMConstants.MessageClass.ADVERTISEMENT);
		} else if (nMsgClass == 3) {
			req.setMessageClass(MMConstants.MessageClass.INFORMATIONAL);
		} else {
			req.setMessageClass(MMConstants.MessageClass.AUTO);
		}*/
		req.setSenderAddress(mmsSubmit.getSrcNum());
		req.setServiceCode(mmsSubmit.getMtServiceCode());
		req.setSubject(mmsContent.getSubject());
		List toList = new ArrayList();
		toList.add(mmsSubmit.getDstNum());
		req.setTo(toList);
		req.setVASID(super.getServiceID());
		req.setVASPID(super.getSpID());
		if (mmsSubmit.getLinkID() != null && 
				mmsSubmit.getLinkID().equalsIgnoreCase("") == false){
			req.setLinkedID(mmsSubmit.getLinkID());
		}
		
		MM7SubmitRes submitRes = null;
		MM7RSRes rsRes = null;
		log.debug("调用API发送彩信");
		
		// 如果强制要状态报告,则设置
		if (wantReport == 1){
			req.setDeliveryReport(true);
		}
			
		// 将Submit消息按照API的要求发送出去
		try {
			// 调用API将SUBMIT消息发送出去
			//System.out.println(req.toString());
			rsRes = (MM7RSRes)sender.send(req);
			log.debug("API发送了");
			if (rsRes instanceof MM7SubmitRes){
				submitRes = (MM7SubmitRes)rsRes;
			}
			else{
				if (rsRes instanceof MM7RSErrorRes){					
					log.error("rsRes的类型:" + rsRes.getClass().getName());
					log.error("Submit发送失败!rsRes.statuscode = " + rsRes.getStatusCode() + "; rsRes.statusText = " + rsRes.getStatusText() +
							"reRes.statusDetail" + rsRes.getStatusDetail());
					/********************************************
					 *  如果错误代码是2001,说明是缓冲区溢出,需要重新启动网关
					 ********************************************/
					if (rsRes.getStatusCode() == 2001 || 
						rsRes.getStatusCode() == -101 ||
						rsRes.getStatusCode() == -104){
						log.error("同彩信中心的TCP连接 或 移动彩信中心出现错误,错误编号是:" + rsRes.getStatusCode() + ",发送网关将通过网关的BAT批处理文件自动重新启动!");
						System.exit(0);
					}
				}
			}

		} catch (Exception e) {
			log.error("发送Submit消息失败:" + "\n" + req.toString());
			e.printStackTrace();
		}

		mmsSubmit.setActualSendTime(new Date());
		mmsSubmit.setSendResult(rsRes.getStatusCode());
		mmsSubmit.setSendResultMemo(rsRes.getStatusText());
		if (submitRes != null){
			mmsSubmit.setMsgID(submitRes.getMessageID());
		}
		else{
			mmsSubmit.setMsgID("-1");
		}
		
		if (mmsSubmit.getMsgID() == null || mmsSubmit.getMsgID().equalsIgnoreCase("")){
			mmsSubmit.setMsgID("-1");
		}
		
		// 保存发送的结果
		try {
			Session sess = HibernateUtil.currentSession();
			Transaction tx = sess.beginTransaction();
			mmsSubmit.setBsending(0);
			sess.update(mmsSubmit);
			tx.commit();
		} catch (Exception e) {
			log.error(e);
		} finally {
			HibernateUtil.closeSession();
		}
		
		// 记录到帐单里
		SimpleDateFormat logDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

		StringBuffer sTmp = new StringBuffer();
		sTmp.append("=================================\n");
		sTmp.append(logDateFormat.format(new Date()) + "\n");
		sTmp.append(mmsSubmit.toString());
		
		bill.log(sTmp.toString());
		
		// 如果返回的状态字不是1000,就表明发送失败
		if (rsRes.getStatusCode() != 1000) {
			log.error("发送Submit消息失败:" + "\n" + mmsSubmit.toString());
			// 将失败的统计次数累加
			staticInfo.addSendFailedNum();
		}
		else{
			System.out.println(sTmp.toString());
			// 将成功的统计次数累加
			staticInfo.addSendSuccessNum();
		}
	}
/*
	public static void main(String[] args){
		CMCCMM7SenderThread t = new CMCCMM7SenderThread();
		t.getName();
	}*/
}

⌨️ 快捷键说明

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