📄 smsinterfacethread.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 + -