You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

283 lines
11 KiB
Java

2 years ago
package com.engine.web.tjbk;
2 years ago
import com.engine.tjbankSocket.SocketExecute;
2 years ago
import com.engine.tjbankSocket.impl.CWGLSocketExecute;
import com.engine.tjbankSocket.impl.CreateArchicesReqSocketExecute;
2 years ago
import com.engine.tjbankSocket.impl.GetToCountSocketExecute;
import com.engine.util.XMLUtils;
import org.apache.commons.lang.StringEscapeUtils;
2 years ago
import weaver.general.BaseBean;
import weaver.general.StringUtil;
import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
2 years ago
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
1 year ago
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
2 years ago
public class TjbkServerSocket implements ServletContextListener {
2 years ago
private SocketThread socketThread;
2 years ago
@Override
public void contextDestroyed(ServletContextEvent arg0) {
// TODO Auto-generated method stub
if (socketThread != null && socketThread.isInterrupted()) {
socketThread.closeServerSocket();
socketThread.interrupt();
}
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
// TODO Auto-generated method stub
1 year ago
// new BaseBean().writeLog("contextInitialized启动");
2 years ago
ServletContext servletContext = arg0.getServletContext();
if (socketThread == null) {
2 years ago
socketThread = new SocketThread(null, servletContext);
2 years ago
socketThread.start(); // servlet上下文初始化时启动socket服务端线程
}
}
}
class SocketThread extends Thread {
private ServletContext servletContext;
private ServerSocket serverSocket;
private ExecutorService executorService; // 线程池
1 year ago
public static Logger logger = LoggerFactory.getLogger("ESBSocket");
2 years ago
public SocketThread(ServerSocket serverSocket, ServletContext servletContext) {
this.servletContext = servletContext;
// 从web.xml中context-param节点获取socket端口
String port = this.servletContext.getInitParameter("socketPort");
if (serverSocket == null) {
try {
this.serverSocket = new ServerSocket(Integer.parseInt(port));
// 创建固定大小的线程池
this.executorService = Executors.newFixedThreadPool(10);
2 years ago
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public void run() {
while (!this.isInterrupted()) { // 线程未中断执行循环
try {
1 year ago
2 years ago
Socket socket = serverSocket.accept();
if (socket != null) {
1 year ago
logger.error("SocketThread线程启动");
// new ProcessSocketData(socket, this.servletContext).start();
executorService.submit(new ProcessSocketData(socket, servletContext));
2 years ago
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void closeServerSocket() {
try {
if (serverSocket != null && !serverSocket.isClosed()) {
serverSocket.close();
executorService.shutdown();
2 years ago
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
class ProcessSocketData implements Runnable {
2 years ago
private Socket socket;
private ServletContext servletContext;
1 year ago
private Logger logger = LoggerFactory.getLogger("ESBSocket");
2 years ago
public ProcessSocketData() {
super();
}
public ProcessSocketData(Socket socket, ServletContext servletContext) {
this.socket = socket;
this.servletContext = servletContext;
1 year ago
2 years ago
}
@Override
public void run() {
1 year ago
PrintWriter pw = null;
BufferedReader in = null;
Socket localSocket = this.socket;
2 years ago
try {
// BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
1 year ago
logger.error("ServerSocket线程启动"+Thread.currentThread().getName());
2 years ago
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8);
1 year ago
// PrintWriter pw = new PrintWriter(outputStreamWriter);
pw = new PrintWriter(outputStreamWriter);
2 years ago
InputStream inputStream = socket.getInputStream();
1 year ago
// BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
in = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
char[] datalen=new char[8];//报文前八位为报文体总长度
2 years ago
in.read(datalen,0,8);
String lendata=new String (datalen);
1 year ago
String clientIPAddress = localSocket.getInetAddress().getHostAddress(); // 获取客户端IP地址
logger.error("Client connected from IP: " + clientIPAddress);
logger.error("request.length:"+lendata);
int length=Integer.parseInt(lendata);
1 year ago
logger.error("报文长度"+length);
// byte[] data=new byte[length];
char[] data=new char[length];
int datalength = in.read(data,0,length);
String requestData = new String(data);
1 year ago
logger.error("requestData",requestData);
2 years ago
String s = "";
if (!StringUtil.isEmpty(requestData.toString())) {
1 year ago
logger.error("requestData",requestData);
s = execute(requestData.toString());
2 years ago
}
// 执行自定义的请求解析方法生成响应response
pw.println(s);
pw.flush(); // 刷新缓冲区
1 year ago
// pw.close();
// socket.close();
2 years ago
// System.out.println(sb);
1 year ago
} catch (Exception e) {
2 years ago
e.printStackTrace();
1 year ago
logger.error("error:"+e.getMessage());
}finally {
if (pw != null) {
pw.close();
}
if (in != null) {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
logger.error("error:"+e.getMessage());
}
}
if (localSocket != null) {
try {
localSocket.close();
} catch (IOException e) {
e.printStackTrace();
logger.error("error:"+e.getMessage());
}
}
2 years ago
}
}
2 years ago
private String execute(String XMLparam){
1 year ago
try {
logger.error("XMLparam=="+XMLparam);
Map<String, String> paramMap = XMLUtils.parseXMLToMap(XMLparam);
logger.error("paramMap=="+paramMap);
StringEscapeUtils.unescapeXml(XMLparam);
//目标系统代码
String system_id = paramMap.get("system_id");
// 请求方系统代码
String requester_id = paramMap.get("requester_id");
// 请求方机构代号
String branch_id = paramMap.get("branch_id");
logger.error("requester_id=="+requester_id);
SocketExecute socketExecute = null;
if ("0157".equals(requester_id)){
logger.error("GetToCountSocketExecute-Start");
socketExecute = new GetToCountSocketExecute();
logger.error("GetToCountSocketExecute-end");
}else if("0170".equals(requester_id)){
logger.error("GetToCountSocketExecute-Start");
socketExecute = new CWGLSocketExecute();
logger.error("CWGLSocketExecute-end");
}else if ("1202".equals(requester_id)){
socketExecute = new CreateArchicesReqSocketExecute();
paramMap.put("xmlString",XMLparam);
1 year ago
}
String execute = socketExecute.execute(paramMap);
logger.error("socketExecute:return"+execute);
return execute;
}catch (Exception e) {
e.printStackTrace();
logger.error("error:"+e.getMessage());
return "";
2 years ago
}
1 year ago
2 years ago
}
1 year ago
// public void run() {
// try {
// (new BaseBean()).writeLog("ServerSocket线程启动");
// OutputStreamWriter outputStreamWriter = new OutputStreamWriter(this.socket.getOutputStream(), StandardCharsets.UTF_8);
// PrintWriter pw = new PrintWriter(outputStreamWriter);
// InputStream inputStream = this.socket.getInputStream();
// BufferedReader in = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));
// char[] datalen = new char[8];
// in.read(datalen, 0, 8);
// String lendata = new String(datalen);
// int length = Integer.parseInt(lendata);
// (new BaseBean()).writeLog("报文长度" + length);
// char[] data = new char[length];
// in.read(data, 0, length);
// String requestData = new String(data);
// (new BaseBean()).writeLog("requestData", requestData);
// String s = "";
// if (!StringUtil.isEmpty(requestData.toString())) {
// (new BaseBean()).writeLog("requestData", requestData);
// s = this.execute(requestData.toString());
// }
//
// pw.println(s);
// pw.flush();
// pw.close();
// this.socket.close();
// } catch (IOException var12) {
// var12.printStackTrace();
// System.out.println(var12);
// }
//
// }
//
// private String execute(String XMLparam) {
// (new BaseBean()).writeLog(this.getClass().getName() + ":XMLparam==" + XMLparam);
// Map<String, String> paramMap = XMLUtils.parseXMLToMap(XMLparam);
// (new BaseBean()).writeLog(this.getClass().getName() + ":paramMap==" + paramMap);
// StringEscapeUtils.unescapeXml(XMLparam);
// String system_id = (String)paramMap.get("system_id");
// String requester_id = (String)paramMap.get("requester_id");
// String branch_id = (String)paramMap.get("branch_id");
// (new BaseBean()).writeLog(this.getClass().getName() + ":requester_id==" + requester_id);
// SocketExecute socketExecute = null;
// if ("0157".equals(requester_id)) {
// socketExecute = new GetToCountSocketExecute();
// (new BaseBean()).writeLog(this.getClass().getName() + ":GetToCountSocketExecute");
// } else if ("0170".equals(requester_id)) {
// socketExecute = new CWGLSocketExecute();
// (new BaseBean()).writeLog(this.getClass().getName() + ":CWGLSocketExecute");
// }
//
// String execute = ((SocketExecute)socketExecute).execute(XMLparam);
// return execute;
// }
2 years ago
}