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

📄 cmccmm7recvservlet.java

📁 彩信接入系统
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 * Created on 2005-3-18
 *
 * 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.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;

import java.util.Date;
import java.util.List;
import java.util.Timer;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletConfig;
import javax.sql.DataSource;

import log.DailyMessageLog;

import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
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.MM7DeliverReq;
import com.cmcc.mm7.vasp.message.MM7DeliverRes;
import com.cmcc.mm7.vasp.message.MM7DeliveryReportReq;
import com.cmcc.mm7.vasp.message.MM7DeliveryReportRes;
import com.cmcc.mm7.vasp.message.MM7ReadReplyReq;
import com.cmcc.mm7.vasp.message.MM7ReadReplyRes;
import com.cmcc.mm7.vasp.message.MM7VASPRes;
import com.cmcc.mm7.vasp.service.MM7ReceiveServlet;
import com.rainbow.mms.common.CMCCMM7DeliverMsg;
import com.rainbow.mms.common.MimeContent;
import com.rainbow.mms.common.MmsContent;
import com.rainbow.mms.common.QueryMimeContentSaveStrategy;
import com.rainbow.util.tools.HibernateUtil;
import com.rainbow.util.tools.TimeOperate;

/**
 * 处理收到的彩信
 * @author Rainbow MMS Group Leader —— TrWorks
 *  
 */
public class CMCCMM7RecvServlet extends MM7ReceiveServlet {

	/**
	 * 网关的接入号码
	 */
	private String gwServiceID = "02163";

	/**
	 * 网关编号
	 */
	private int gwGateWayID = 89;

	/**
	 * 数据库的数据源
	 */
	private DataSource ds = null;

	/**
	 * 接收帐单
	 */
	private static DailyMessageLog bill = new DailyMessageLog();

	/**
	 * 日志
	 */
	private static Logger log = Logger.getLogger(CMCCMM7RecvServlet.class);
	
	/**
	 * 统计使用的定时器
	 */
	private Timer staticTimer = null;

	/**
	 *  
	 */
	private String mm7ConfigFilePath = null;

	/**
	 * 初始化Servlet
	 */
	public void init(ServletConfig config) {
		
		System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");

		// 设置帐单名称
		
		try {
			Context initCtx = new InitialContext();

			Context envContext = (Context) initCtx.lookup("java:/comp/env");
			if (envContext == null) {
				throw new Exception("Boom - No Context");
			}

			ds = (DataSource) envContext.lookup("jdbc/MMSDB2");

			gwServiceID = (String) config.getInitParameter("gwServiceID");
			String billPath = (String) config.getInitParameter("billPath");
			String logConfigPath = (String)config.getInitParameter("logConfigPath");
			PropertyConfigurator.configure(logConfigPath);
			log.info("初始化接收型网关的Servlet");
			//bill.setLogFile("bill\\mmsrecvbill");
			bill.setLogFile(billPath);
			
			gwGateWayID = Integer.parseInt(((String) config
					.getInitParameter("gwGateWayID")));

			System.out.println("ServiceID:" + gwServiceID);
			System.out.println("GateWayID:" + gwGateWayID);

			mm7ConfigFilePath = (String) config
					.getInitParameter("mm7ConfigFilePath");

			System.out.println("MM7ConfigFile:" + mm7ConfigFilePath);
			System.out.println("billPath:" + billPath);
			System.out.println("logConfigPath:" + billPath);
			Config = new MM7Config(mm7ConfigFilePath);

			envContext.close();
			initCtx.close();

			//System.out.println("End Init Servlet mm7");
			RecverStaticInfo staticInfo = RecverStaticInfo.getInstance();
			staticTimer = new Timer();
			staticTimer.schedule(staticInfo, 0, (60*60*1000));

		} catch (Exception e) {
			e.printStackTrace();
			log.error("读取数据库和网关的连接信息时出现异常");
		}
		
		System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
	}
	
	public void destroy()
	{
		System.out.println("------------------------------------------------------------");
		System.out.println("------------------------------------------------------------");
	}

	/**
	 * 处理收到的普通的Deliver消息,并回复应答消息
	 */
	public MM7VASPRes doDeliver(MM7DeliverReq request) {
		if (request == null) {
			return null;
		}

		// 累加统计计数器
		RecverStaticInfo.getInstance().addDeliverNum();
		
		// 取出符合接入号码的目的号码
		String dstNum = getValidDstNum(request);

		// 将收到的Deliver消息在界面上打印出来
		StringBuffer buffer = new StringBuffer();
		buffer.append("------收到Deliver消息------\n");
		buffer.append("MMSCID:" + request.getMMSRelayServerID() + "\n");
		buffer.append("recvTime: " + TimeOperate.getNowTime() + "\n");
		buffer.append("srcNum: " + request.getSender() + "\n");
		buffer.append("dstNum: " + dstNum + "\n");
		buffer.append("subject: " + request.getSubject() + "\n");
		buffer.append("transactionID: " + request.getTransactionID() + "\n");
		buffer.append("gatewayID: " + this.gwGateWayID + "\n");
		buffer.append("priority: " + request.getPriority() + "\n");
		buffer.append("linkID: " + request.getLinkedID() + "\n");
		buffer.append("replyCharging: " + request.getReplyChargingID() + "\n");
		System.out.println(buffer.toString());

		// 将收到的Deliver消息保存到帐单中
		bill.log(buffer.toString());

		if (dstNum == null) {
			log.warn("收到的目的号码不符合我们的接入号码");
		} else {
			// 处理收到的请求消息
			doDeliverMsg(request, dstNum);
		}

		// 回复应答消息
		MM7DeliverRes mm7DeliverRes = new MM7DeliverRes();
		mm7DeliverRes.setStatusCode(MMConstants.RequestStatus.SUCCESS);
		mm7DeliverRes.setTransactionID(request.getTransactionID());
		mm7DeliverRes.setServiceCode(gwServiceID);

		// 在界面上打印出应答消息
		StringBuffer resOutput = new StringBuffer();
		resOutput.append("------发送Deliver应答消息------\n");
		resOutput.append("transactionID: " + mm7DeliverRes.getTransactionID()
				+ "\n");
		resOutput.append("statusCode: " + mm7DeliverRes.getStatusCode() + "\n");
		resOutput.append("serviceCode: " + mm7DeliverRes.getServiceCode()
				+ "\n");
		System.out.println(resOutput.toString());

		return (MM7VASPRes) mm7DeliverRes;
	}

	/**
	 * 处理收到的普通的Deliver消息,将消息放入到数据库中
	 * 
	 * @param request
	 */
	protected void doDeliverMsg(MM7DeliverReq request, String dstNum) {

		if (request == null || dstNum == null) {
			return;
		}
		
		Session sess = HibernateUtil.currentSession();
		int deliverID = 0;
		
		try {
			CMCCMM7DeliverMsg deliverMsg = new CMCCMM7DeliverMsg();
			deliverMsg.setContentType(0);
			deliverMsg.setDstNum(dstNum);
			deliverMsg.setGateWayId(gwGateWayID);
			deliverMsg.setLinkId(request.getLinkedID());
			deliverMsg.setMmscId(request.getMMSRelayServerID());
			deliverMsg.setMsgId(request.getTransactionID());
			deliverMsg.setRecvTime(new Date());
			deliverMsg.setSrcNum(request.getSender());
			deliverMsg.setWantRead(0);
			deliverMsg.setWantReport(0);

			MmsContent mmsContent = new MmsContent();
			mmsContent.setCreateFrom(0);
			mmsContent.setCreaterMemo("user");
			mmsContent.setCreateTime(new Date());
			mmsContent.setSubject(request.getSubject());

			Transaction tx = sess.beginTransaction();

			// 请求消息内有多媒体内容
			if (request.isContentExist() == true) {
				//System.out.println("Has MMS Content");
				MMContent parentContent = request.getContent();
				MMContent c = parentContent;
				
				// 多媒体内容是由多个多媒体元素组成的
				if (parentContent.isMultipart()) {
					//System.out.println("Has Many MMS Content");
					List listElements = parentContent.getSubContents();
					for (int i = 0; i < listElements.size(); i++) {
						c = (MMContent) listElements.get(i);
						MimeContent e = new MimeContent();
						e.setMimeType(c.getContentType().getPrimaryType() + "/"
								+ c.getContentType().getSubType());
						e.setMimeContentName(c.getContentID());
						e.setCreateTime(new Date());
						// 按照文本格式保存
						if (QueryMimeContentSaveStrategy.getSaveStrategy(e
								.getMimeType(), sess) == 1) {
							e.setCharacterContent(c.getContentAsString());
						} else { // 按照二进制格式保存
							e.setBinaryContent(c.getContent());
						}
						//System.out.println(e.toString());
						// 保存该多媒体元素
						sess.save(e);
						// 将该多媒体元素加入到彩信内容体中
						mmsContent.getMmsContentElments().add(e);

⌨️ 快捷键说明

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