📄 mm7receiver.java
字号:
/**
* 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 + -