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

📄 mm7receiver.java

📁 彩信发送源代码,实现mm7接口
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/**
 * File Name:MM7Receiver.java Company: 中国移动集团公司 Date : 2004-2-17
 */

package com.cmcc.mm7.vasp.service;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.ByteArrayOutputStream;
import java.io.DataInputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InterruptedIOException;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;

import sun.misc.BASE64Encoder;

import com.cmcc.mm7.vasp.common.ConnectionPool;
import com.cmcc.mm7.vasp.common.MMConstants;
import com.cmcc.mm7.vasp.common.SOAPDecodeException;
import com.cmcc.mm7.vasp.common.SOAPDecoder;
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.MM7RSReq;
import com.cmcc.mm7.vasp.message.MM7ReadReplyReq;
import com.cmcc.mm7.vasp.message.MM7ReadReplyRes;
import com.cmcc.mm7.vasp.message.MM7VASPRes;

// import util.concurrent.*;

public class MM7Receiver implements MM7AbstractReceiver {
	protected MM7Config Config;

	private int port;

	private InetAddress ip;

	// private int maxLongLinkNumber;
	private Thread ListenThread = null;

	private ServerSocket SSocket;

	private int BackLog;

	// private int ConnectCounts = 0;
	private long receiveNumber = 1;

	private ByteArrayOutputStream Finerbaos;

	private StringBuffer TempBuffer;

	private StringBuffer SevereBuffer;

	private StringBuffer InfoBuffer;

	// private StringBuffer FinerBuffer;
	private SimpleDateFormat sdf;

	private SimpleDateFormat Recordsdf;

	// private long LogTimeBZ;
	// private long SameMinuteTime;
	// private int SameMMSCID;
	private String MMSCID;

	private int N;

	private DecimalFormat df;

	private String logFileName;

	private String strEnvelope;

	Socket CSocket;

	private boolean LongLinkFlag;

	private boolean isStop;

	public MM7Receiver() // 构造方法
	{
		reset();
		port = 80;
		// maxLongLinkNumber = 20;
		BackLog = 50;
		try {
			ip = InetAddress.getLocalHost();
		}
		catch (UnknownHostException uhe) {
			System.err.println("没有激活的TCP/IP配置!" + uhe);
			SevereBuffer.append("[没有激活的TCP/IP配置!原因:" + uhe + "]");
		}
		catch (Exception e) {
			System.err.println(e);
			SevereBuffer.append("[错误!原因:" + e + "]");
		}
	}

	private void reset() {
		port = 80;
		// maxLongLinkNumber = 20;
		BackLog = 50;
		Finerbaos = new ByteArrayOutputStream();
		TempBuffer = new StringBuffer();
		SevereBuffer = new StringBuffer();
		InfoBuffer = new StringBuffer();
		// FinerBuffer = new StringBuffer();
		// LogTimeBZ = System.currentTimeMillis();
		// SameMinuteTime = System.currentTimeMillis();
		sdf = new SimpleDateFormat("yyyyMMddHHmm");
		df = new DecimalFormat("0000");
		N = 0;
		// SameMMSCID = 0;
		logFileName = "";
		strEnvelope = "";
		Recordsdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		isStop = false;
	}

	public MM7Receiver(MM7Config config) // 构造方法
	{
		reset();
		Config = config;
		ConnectionPool pool = ConnectionPool.getInstance();
		pool.setConfig(config);
		String strKeepAlive = pool.getKeepAlive();
		if (strKeepAlive.equalsIgnoreCase("on"))
			this.setLongLink(true);
		else
			this.setLongLink(false);
		// maxLongLinkNumber = pool.getServerMaxSize();
		port = Config.getListenPort();
		try {
			ip = InetAddress.getByName(Config.getListenIP());
		}
		catch (Exception e) {
			e.printStackTrace();
			SevereBuffer.append("[错误!原因:" + e + "]");
		}
		BackLog = Config.getBackLog();
	}

	// private void setSameMinuteTime(long time)
	// {
	// SameMinuteTime = time;
	// }
	// private long getSameMinuteTime()
	// {
	// return SameMinuteTime;
	// }
	// private void setSameMMSCID(int mmscid)
	// {
	// SameMMSCID = mmscid;
	// }
	// private int getSameMMSCID()
	// {
	// return SameMMSCID;
	// }

	private void setLongLink(boolean longflag) {
		LongLinkFlag = longflag;
	}

	private boolean getLongLink() {
		return LongLinkFlag;
	}

	public void setConfig(MM7Config config) // 设置MM7Config
	{
		this.Config = config;
		ConnectionPool pool = ConnectionPool.getInstance();
		pool.setConfig(config);
		String strKeepAlive = pool.getKeepAlive();
		if (strKeepAlive.equalsIgnoreCase("on"))
			this.setLongLink(true);
		else
			this.setLongLink(false);
		// maxLongLinkNumber = pool.getServerMaxSize();
		port = Config.getListenPort();
		try {
			ip = InetAddress.getByName(Config.getListenIP());
		}
		catch (Exception e) {
			e.printStackTrace();
			SevereBuffer.append("[错误!原因:" + e + "]");
		}
		BackLog = Config.getBackLog();
	}

	public MM7Config getConfig() // 获得MM7Config
	{
		return (this.Config);
	}

	public void start() // 启动接收器
	{
		try {
			SSocket = new ServerSocket(port, BackLog, ip);
		}
		catch (UnknownHostException uhe) {
			System.err.println("该计算机没有连接上DNS服务器或主机没有找到!" + uhe);
			SevereBuffer.append("[该计算机没有连接上DNS服务器或主机没有找到!" + uhe + "]");
		}
		catch (Exception e) {
			String msg = e.getMessage();
			if (msg.indexOf("Address already in use") != -1)
				msg = "端口号已经被占用。";
			String errorMessage = "不能绑定到端口号:" + port + ";原因:" + msg;
			System.err.println(errorMessage);
			SevereBuffer.append("[" + errorMessage + "]");
			return;
		}

		if (ListenThread != null)
			ListenThread.setName("stop");
		ListenThread = new Thread("MM7-Listen") {
			public void run() {
				/*
				 * PooledExecutor poolexe = new PooledExecutor(new
				 * BoundedBuffer(10),50); poolexe.setMinimumPoolSize(5);
				 * poolexe.createThreads(5); poolexe.setKeepAliveTime(1600);
				 * poolexe.waitWhenBlocked();
				 */
				try {
					// 等待连接
					while (1 > 0) {
						// System.out.println("进入这里!");
						// SevereBuffer.append("\r\n进入这里!");
						/*
						 * PooledExecutor poolexe = new PooledExecutor(50);
						 * poolexe.setMinimumPoolSize(5);
						 * poolexe.createThreads(5);
						 * poolexe.setKeepAliveTime(1600);
						 * poolexe.waitWhenBlocked();
						 */
						if (!isStop) {
							try {
								// System.out.println("poolexe.getPoolSize()="+poolexe.getPoolSize());
								// SevereBuffer.append("poolexe.getPoolSize()="+poolexe.getPoolSize()+"\r\n");
								// SevereBuffer.append("enter this! ");
								if (!SSocket.isClosed()) {
									CSocket = SSocket.accept();
									ServiceConnect(CSocket, 1);
									/*
									 * poolexe.execute(new Runnable() { public
									 * void run() { try {
									 * ServiceConnect(CSocket, 1); } catch
									 * (Exception e) {} } });
									 */
								}
							}
							catch (Exception e) {
								SevereBuffer.append("inner.Exception:" + e);
							}
						}
					}
				}
				catch (Exception e) {
					SevereBuffer.append("outer.Exception:" + e);
				}
				finally {
					try {
						/*
						 * if(poolexe != null)
						 * poolexe.shutdownAfterProcessingCurrentlyQueuedTasks();
						 */
						if (SSocket != null)
							SSocket.close();
					}
					catch (Exception e) {
						SevereBuffer.append("SSocket不能被close.原因:" + e);
					}
				}
				// System.out.println("结束监听线程的运行\n");
			}
		};
		ListenThread.setDaemon(true);
		ListenThread.start();
	}

	public void stop() // 停止接收器
	{
		isStop = true;
		/*
		 * try { if(ListenThread.isAlive()) ListenThread.destroy(); if(SSocket !=
		 * null) SSocket.close(); } catch(Exception e) {
		 * SevereBuffer.append("stop().SSocket不能被close.原因:"+e); }
		 */
	}

	// 处理到VASP的传送(deliver)多媒体消息
	public MM7VASPRes doDeliver(MM7DeliverReq mm7DeliverReq) {
		MM7DeliverRes res = new MM7DeliverRes();
		res.setTransactionID(mm7DeliverReq.getTransactionID());
		res.setStatusCode(1000);
		return res;
	}

	public MM7VASPRes doDeliveryReport(MM7DeliveryReportReq mm7DeliveryReportReq) {
		MM7DeliveryReportRes res = new MM7DeliveryReportRes();
		res.setTransactionID(mm7DeliveryReportReq.getTransactionID());
		res.setStatusCode(1000);
		return res;
	}

	// 抽象方法。处理到VASP的读后回复报告
	public MM7VASPRes doReadReply(MM7ReadReplyReq mm7ReadReplyReq) {
		MM7ReadReplyRes res = new MM7ReadReplyRes();
		res.setTransactionID(mm7ReadReplyReq.getTransactionID());
		res.setStatusCode(1000);
		return res;
	}

	private void WriteLog(String MMSCID) {
		try {
			int logLevel = Config.getLogLevel();
			String LogPath = Config.getLogPath();
			int LogNum = Config.getLogNum();
			int LogInterval = Config.getLogInterval();
			int LogSize = Config.getLogSize();
			// long Interval = System.currentTimeMillis() - LogTimeBZ;
			String sTimeNow = sdf.format(new Date(System.currentTimeMillis()));
			long timeNow, timeFile = 0;
			timeNow = sdf.parse(sTimeNow).getTime();
			if (logFileName.length() > 0) {
				File logFile = new File(logFileName);
				int index1 = logFileName.indexOf(Config.getMmscId() + "_");
				int index11 = index1 + Config.getMmscId().length() + 1;
				int index2 = logFileName.indexOf(".", index11);
				String sTimeFile = logFileName.substring(index1 + Config.getMmscId().length() + 1, index2);
				timeFile = sdf.parse(sTimeFile).getTime();

				if (timeNow - timeFile > (long) LogInterval * 60 * 1000) {
					N = 1;
					this.deleteFile(LogPath, LogNum, Config.getMmscId());
					logFileName = LogPath + "/" + Config.getMmscId() + "_" + sTimeNow + "." + df.format(N) + ".log";
				}
				else {
					if (logFile.length() > LogSize * 1024) {
						if (N < LogNum)
							N++;
						else
							N = 1;
						this.deleteFile(LogPath, LogNum, Config.getMmscId());
						logFileName = LogPath + "/" + Config.getMmscId() + "_" + sTimeFile + "." + df.format(N)
								+ ".log";
					}
				}
			}
			else {
				N = 1;
				this.deleteFile(LogPath, LogNum, Config.getMmscId());
				logFileName = LogPath + "/" + Config.getMmscId() + "_" + sTimeNow + "." + df.format(N) + ".log";
			}
			switch (logLevel)
				{
				case 1:
					try {
						FileOutputStream fos = new FileOutputStream(logFileName, true);
						fos.write(SevereBuffer.toString().getBytes());
						fos.close();
						SevereBuffer = new StringBuffer();
					}
					catch (IOException ioe) {
						ioe.printStackTrace();
					}
					break;
				case 2:
					break;
				case 3:
					try {
						FileOutputStream fos = new FileOutputStream(logFileName, true);
						if (SevereBuffer != null && SevereBuffer.length() > 0)
							fos.write(SevereBuffer.toString().getBytes());
						if (InfoBuffer != null && InfoBuffer.length() > 0)
							fos.write(InfoBuffer.toString().getBytes());
						fos.close();

⌨️ 快捷键说明

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