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

📄 mm7receiver.java

📁 彩信网关程序,SP程序,包含移动彩信代码和电信彩信代码!供学习之用
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
/**File Name:MM7Receiver.java
 * Company:  中国移动集团公司
 * Date  :   2004-2-17
 * */

package com.hxyh.sanny.mms.cmcc.mm7.vasp.service;

import java.net.*;
import java.io.*;
import java.text.*;
import java.util.*;
import sun.misc.*;
import java.security.*;
import com.hxyh.sanny.mms.cmcc.mm7.vasp.message.*;
import com.hxyh.sanny.mms.cmcc.mm7.vasp.conf.*;
import com.hxyh.sanny.mms.cmcc.mm7.vasp.common.*;
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();
					SevereBuffer = new StringBuffer();
					InfoBuffer = new StringBuffer();
				} catch (IOException ioe) {
					ioe.printStackTrace();
				}
				break;
			case 4:
				break;
			case 6:
				try {
					FileOutputStream fos = new FileOutputStream(logFileName,
							true);
					if (fos != null) {
						if (SevereBuffer != null && SevereBuffer.length() > 0)
							fos.write(SevereBuffer.toString().getBytes());
						if (InfoBuffer != null && InfoBuffer.length() > 0)
							fos.write(InfoBuffer.toString().getBytes());
						if (Finerbaos != null && Finerbaos.size() > 0)
							fos.write(Finerbaos.toByteArray());
						fos.close();
						SevereBuffer = new StringBuffer();
						InfoBuffer = new StringBuffer();
						Finerbaos = new ByteArrayOutputStream();
					}
				} catch (IOException ioe) {
					ioe.printStackTrace();
				}
				break;
			case 7:
				break;
			default:
				break;
			}

⌨️ 快捷键说明

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