📄 mm7receiver.java
字号:
/**File Name:MM7Receiver.java
* Company: 中国移动集团公司
* Date : 2004-2-17
* */
package com.cmcc.mm7.vasp.service;
import java.net.*;
import java.io.*;
import java.text.*;
import java.util.*;
import sun.misc.*;
import java.security.*;
import com.cmcc.mm7.vasp.message.*;
import com.cmcc.mm7.vasp.conf.*;
import com.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;
}
}catch(Exception e){}
/*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;
FileOutputStream fos = null;
SimpleDateFormat simpledf = new SimpleDateFormat("yyyyMMddHHmm");
String temptime = simpledf.format(new Date(System.currentTimeMillis()));
long timeNow = 0;
try{
timeNow = simpledf.parse(temptime).getTime();
}catch(ParseException pe){
pe.printStackTrace();
}
if(logFileName.length() > 0)
{
File logFile = new File(logFileName);
int index1 = logFileName.indexOf(MMSCID+"_");
int index11 = index1 + MMSCID.length()+1;
int index2 = logFileName.indexOf(".",index11+1);
String strtimeFile = logFileName.substring(index11,index2);
long timeFile = 0;
try{
timeFile = simpledf.parse(strtimeFile).getTime();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -