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

📄 smssender.java

📁 中国联通短信通信协议
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package com.wireless.sms.unsoap;

import java.math.BigDecimal;
import java.sql.Timestamp;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.Vector;

import org.apache.axis.types.URI;
import org.apache.log4j.Logger;
import org.w3c.dom.Element;

import cn.com.chinaunicom.www.schema.cuc.common.v2_1.ChargingInformation;
import cn.com.chinaunicom.www.schema.cuc.common.v2_1.PolicyException;
import cn.com.chinaunicom.www.schema.cuc.common.v2_1.ServiceException;
import cn.com.chinaunicom.www.schema.cuc.common.v2_1.SimpleReference;
import cn.com.chinaunicom.www.schema.cuc.sms.v2_1.DeliveryInformation;
import cn.com.chinaunicom.www.schema.cuc.sms.v2_1.DeliveryStatus;
import cn.com.chinaunicom.www.wsdl.cuc.sms.send.v2_1.service.SendSmsBindingStub;
import cn.com.chinaunicom.www.wsdl.cuc.sms.send.v2_1.service.SendSmsService;
import cn.com.chinaunicom.www.wsdl.cuc.sms.send.v2_1.service.SendSmsServiceLocator;

import com.vasp.HeaderSet;
import com.wireless.sms.gwif.smsagent.entity.UN;
import com.wireless.sms.gwif.smsagent.func.CheckForSend;
import com.wireless.sms.gwif.smsagent.global.GetMoMtGlobalForUsual;
import com.wireless.sms.gwif.smsagent.global.LoggerConstant;
import com.wireless.sms.gwif.smsagent.workthread.ControlWindow;
import com.wireless.sms.gwif.smsagent.workthread.NightSaver;
import com.wireless.sms.gwif.smsagent.workthread.SendMonitor;
import com.wireless.sms.pub.entity.MT;
import com.wireless.sms.pub.mq.MTQueue;
import com.wireless.sms.pub.mq.ObjectQueue;
import com.wireless.sms.unsoap.global.Constant;
import com.wireless.sms.unsoap.global.Util;
import com.wireless.sms.unsoap.workthread.HeaderSetExtend;

public class SMSSender extends Thread{
	protected MTQueue mtqueue = GetMoMtGlobalForUsual.mtqueue;
    protected ObjectQueue objqueue = ObjectQueue.getInstance();
    protected ControlWindow flowWindow = ControlWindow.getInstance();
    protected int controlSize = 16;
    private Logger mtlog = LoggerConstant.mt_log;
    private int period;
    
    private Timer timer = null;
    private static SMSSender _instance = null;
    
    private SMSSender(){
    	
    }
    public static synchronized SMSSender getInstance(){
    	if(_instance == null){
    		_instance = new SMSSender();
    	}
    	return _instance;
    }

    public void run(){
    	this.controlSize = UN.getInstance().getControlSize();
    	this.period = 1000/UN.getInstance().getFlowControl();
		LoggerConstant.stat_log.info("启动 mt 发送...");
    	if(timer == null){
    		timer = new Timer(true);
    	}
    	timer.schedule(new java.util.TimerTask(){
    			public void run(){
    				new Thread(){
    					public void run(){
    						processSend();
    					}
    				}.start();
//    				processSend();
    			}}, 1000, period);
    }
    
	public void processSend() {
		try {
			SendMonitor.getInstance().setSendMTFlag(true);

			if (mtqueue.sizeByPriority() <= 0) {
				return;
			}

			// 从队列中取出,进行发送
			if (flowWindow.size() < controlSize) { // 允许可以发送
				MT mt = (MT) mtqueue.removeByPriority();
				MT copy = null;

				if (mt != null) {
					int checkResult = CheckForSend.getInstance().checkForSend(
							mt);

					if (checkResult == 2) {
						objqueue.add(mt);
					} else if (checkResult == 3) {
						// mtqueue.add(mt.getMsgLevel(), mt);
						NightSaver.getInstance().add(mt);
					} else {
						mtlog.info("--- 发送 Cmpp Submit 包开始 ---");
						try {
							copy = (MT) mt.clone();
							String sendResult = "";
							try {
								if(mt.getDestTermID()!=null && mt.getDestTermID().startsWith("86"))
									mt.setDestTermID(mt.getDestTermID().substring(2));
								if(mt.getFeeTermID()!=null && mt.getFeeTermID().startsWith("86"))
									mt.setFeeTermID(mt.getFeeTermID().substring(2));
//								 开始调用发送模块
								sendResult = sendMessage(mt);
								if ("".equalsIgnoreCase(sendResult)) {
									mtqueue.add(copy.getMsgLevel(), copy);
									return;
								}
							} catch (ServiceException ex) {//业务异常
								Element[] e = ex.getFaultDetails();
								for (int i = 0; i < e.length; i++) {
									try {
										String messageId = "";
										String text = "";
										String variables = "";
										try {
											messageId = /*" messageId = "+*/ e[i].getElementsByTagName("messageId")
															.item(0).getFirstChild().getNodeValue();
										} catch (java.lang.NullPointerException exc) {
										}										
										try {
											text = " text = "+ e[i].getElementsByTagName("text")
															.item(0).getFirstChild().getNodeValue();
										} catch (java.lang.NullPointerException exc) {
										}										
										try {
											variables = " variables = "+ e[i].getElementsByTagName("variables")
															.item(0).getFirstChild().getNodeValue();
										} catch (java.lang.NullPointerException exc) {
										}
										sendResult = sendResult
										+ e[i].getTagName() + messageId + text + variables;
										
										mt.setStatus("B:"+messageId);
										Timestamp time = new Timestamp(System.currentTimeMillis());
										mt.setRespTime(time.toLocaleString());
										objqueue.add(mt);
										mtlog.info("mt 发送结果 :" + sendResult);
										mtlog.info("从滑动窗口中移除:mt.getMsgID() = " + mt.getMsgID());
										flowWindow.remove(mt.getMsgID());
										return;
									} catch (Exception n) {
										mtlog.error("Exception:",n);
									}									
								}
							} catch (PolicyException ex) {//策略异常
								Element[] e = ex.getFaultDetails();
								for (int i = 0; i < e.length; i++) {
									try {
										String messageId = "";
										String text = "";
										String variables = "";
										try {
											messageId = /*" messageId = "+ */e[i].getElementsByTagName("messageId")
															.item(0).getFirstChild().getNodeValue();
										} catch (java.lang.NullPointerException exc) {
										}										
										try {
											text = " text = "+ e[i].getElementsByTagName("text")
															.item(0).getFirstChild().getNodeValue();
										} catch (java.lang.NullPointerException exc) {
										}										
										try {
											variables = " variables = "+ e[i].getElementsByTagName("variables")
															.item(0).getFirstChild().getNodeValue();
										} catch (java.lang.NullPointerException exc) {
										}
										sendResult = sendResult
										+ e[i].getTagName() + messageId + text + variables;
										
										mt.setStatus("B:"+messageId);
										Timestamp time = new Timestamp(System.currentTimeMillis());
										mt.setRespTime(time.toLocaleString());
										objqueue.add(mt);
										mtlog.info("从滑动窗口中移除:mt.getMsgID() = " + mt.getMsgID());
										flowWindow.remove(mt.getMsgID());
										mtlog.info("mt 发送结果 :" + sendResult);
										return;
									} catch (Exception n) {
										mtlog.error("Exception:",n);
									}									
								}
							} catch (Exception e) {
								mtlog.error("Exception : ", e);
								mtlog.info("从滑动窗口中移除:mt.getMsgID() = " + mt.getMsgID());
								flowWindow.remove(mt.getMsgID());
								mtqueue.add(copy.getMsgLevel(), copy);
								return;

⌨️ 快捷键说明

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