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

📄 smsinterfacethread.java

📁 短信
💻 JAVA
字号:
package com.asiainfo.batchsend.sms.sms;

import java.util.List;

import org.apache.log4j.Logger;

import com.asiainfo.batchsend.sms.sms.MessageInfo;
import com.asiainfo.batchsend.sms.sms.SmsChannelConfig;
import com.asiainfo.batchsend.sms.sms.cmpp.CMPP_Service;
import com.asiainfo.batchsend.sms.sms.cmpp.message.SubmitMsg;
import com.asiainfo.batchsend.sms.sms.cmpp.type.CMPP2;
import com.asiainfo.batchsend.sms.sms.cmpp.type.CMPP3;
import com.asiainfo.batchsend.sms.sms.cmpp.type.CMPP_DR;
import com.asiainfo.batchsend.sms.sms.cmpp.type.CMPP_HW;
import com.asiainfo.batchsend.sms.sms.cmpp.type.CMPP_SX;
import com.asiainfo.batchsend.sms.sms.cmpp.type.CMPP_YX;
import com.asiainfo.batchsend.sms.sms.db.SmsInterfaceSvc;
import com.asiainfo.batchsend.util.SmsUtil;

/**
 * <p>Title: 作为所有提醒短信的接口表,只要放在该表中的数据,就会被发送出去</p>
 * <p>Description: </p>
 * <p>Company: Asiainfo Technologies(China),Inc </p>
 * <p>Date: Dec 19, 2007 5:44:19 PM </p>
 * <p>Email to: jiangyl@asiainfo.com </p>
 * @author jiangyl
 * @version 1.0  
 */
public class SmsInterfaceThread extends Thread {
	private static final Logger log = Logger.getLogger(SmsInterfaceThread.class);
	private CMPP_Service cmpp = null;
	private SmsChannelConfig config = null; 
	private int verson = 0;
	private boolean safeExit = false;
	    
	public void safeExit() {
		this.safeExit = true;
	}

	public SmsInterfaceThread(String channelId) {
		super("SMS-SmsInterfaceThread");
	    //从配置文件中获取 网关类型
		config = SmsUtil.getSmsConfig(channelId);
		String gatewaytype = config.getGatewaytype().trim();
		if(gatewaytype.equals("CMPP2")){
			this.cmpp = new CMPP2();
			this.verson = 0x20;
		} else if(gatewaytype.equals("CMPP3")){
			this.cmpp = new CMPP3();
			this.verson = 0x30;
		} else if(gatewaytype.equals("DR")){
			this.cmpp = new CMPP_DR();
			this.verson = 0x12;
		} else if(gatewaytype.equals("YX")){
			this.cmpp = new CMPP_YX();
			this.verson = 0x30;
		} else if(gatewaytype.equals("HW")){
			this.cmpp = new CMPP_HW();
			this.verson = 0x30;
		} else if(gatewaytype.equals("SX")){
			this.cmpp = new CMPP_SX();
			this.verson = 0x30;
		}
	}

	public void run() {
		SmsInterfaceSvc loader = new SmsInterfaceSvc();
		while ( !safeExit ){
			boolean run = loader.hasData();
			if ( !run ){
				threadSleep(10000);
				continue;
			}
			try{	
				int stat = this.cmpp.initCMPP(config.getISMG_ADDR(), config.getICP_ID(),config.getICP_ID(),	config.getICP_PASS(), "", this.verson, config.getISMG_PORT(), "MT", config.getChannelId());
				if (stat==0) {
					log.info("以" + config.getICP_ID() + "/" + config.getICP_PASS() + "建立到短信网关(" + config.getISMG_ADDR() + ":" + config.getISMG_PORT()	+ ")的连接成功.");
					boolean flag = true;
					//* 按需要链接
					while  ( !safeExit || flag ) {
						flag = doStart(loader);
					}  
					  
					//长链接 不退出
					while  ( !safeExit) {
						flag = doStart(loader);
						if ( !flag )
							threadSleep(10000);
					}
				}else{
					log.info("以" + config.getICP_ID() + "/" + config.getICP_PASS() + "建立到短信网关(" + config.getISMG_ADDR() + ":" + config.getISMG_PORT()	+ ")的连接不成功,请联系系统管理员.");
				}
			}catch(Exception e){
				log.error("发送数据时发送严重的错误",e);
			}finally{
				try{
					this.cmpp.quit();
				} catch(Exception e){
				}	
				log.info("以" + config.getICP_ID() + "/" + config.getICP_PASS() + "建立到短信网关(" + config.getISMG_ADDR() + ":" + config.getISMG_PORT()	+ ")的连接已经退出.");
			}
		}
	}

	/**
	 * 处理包括数据库操作和短信发送的整个流程方法,一次处理100条数据库记录
	 * 
	 * @throws Exception
	 * 
	 */
	public boolean doStart(SmsInterfaceSvc loader) throws Exception {
		List messages = loader.loadData();
		if ( messages == null || messages.size() == 0){
			return false;
		}
		for (int i = 0; i < messages.size(); i++) {
			MessageInfo mbi = (MessageInfo) messages.get(i);
			// 创建消息体并发送短信
			try {				
				SubmitMsg msg = new SubmitMsg();
				this.new_cmpp_submit(msg, mbi.getPhonenumber(), mbi.getMessage());
				int stat = this.cmpp.submit(msg);
				threadSleep(15);
				if(stat!=0){
					threadSleep(500);
				}
			} catch (Exception ex) {
				threadSleep(5*1000);
			}
		}	
		return true;
	}

	/**
	 * 创建短信发送消息包内容
	 * 
	 * @param cmppe_submit1
	 * @param msgScrAddr
	 * @param msgContent
	 * @throws Exception
	 */
	private void new_cmpp_submit(SubmitMsg msg, String msisdn,
			String msgContent) throws Exception {
		msg.nFeeUserType = 0;
		msg.nMsgFormat = 15;
		msg.nDestUsrTl =1;
		msg.nMsgLength = msgContent.length();
		msg.nNeedReply = 0;
		msg.sFeeCode = config.getINFO_FEE();
		msg.sFeeMobile = null;
		msg.sDestTerminalId = msisdn;
		msg.sMsgContent = msgContent;
		msg.sMsgSrc = config.getMSG_SCR_ADDR();
		msg.sSrcId = config.getSERVICE_TYPE();
		msg.sFeeType = config.getFEE_TYPE();
		msg.sServiceId = config.getSERVICE_TYPE();
		msg.sValidTime = config.getMSG_VALIDATE();		
		msg.picAndRing = null;
		 
	}

	public void destroy() {
		this.interrupt();
		try {
			this.join(500);
		} catch (Exception e) {
		}
	}
	
	public static void threadSleep(long millis) {
		try {
			Thread.sleep(millis);
		} catch (InterruptedException e) {
		}
	}   

}

⌨️ 快捷键说明

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