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.

163 lines
5.7 KiB
Java

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.engine.web.tjbk;
import com.engine.tjbankSocket.SocketExecute;
import com.engine.tjbankSocket.impl.CWGLSocketExecute;
import com.engine.tjbankSocket.impl.GetToCountSocketExecute;
import com.engine.util.XMLUtils;
import org.apache.commons.lang.StringEscapeUtils;
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;
import java.util.Map;
public class TjbkServerSocket implements ServletContextListener {
private SocketThread socketThread;
@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
new BaseBean().writeLog("contextInitialized启动");
ServletContext servletContext = arg0.getServletContext();
if (socketThread == null) {
socketThread = new SocketThread(null, servletContext);
socketThread.start(); // servlet上下文初始化时启动socket服务端线程
}
}
}
class SocketThread extends Thread {
private ServletContext servletContext;
private ServerSocket serverSocket;
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));
} catch (IOException e) {
e.printStackTrace();
}
}
}
@Override
public void run() {
while (!this.isInterrupted()) { // 线程未中断执行循环
try {
new BaseBean().writeLog("SocketThread线程启动");
Socket socket = serverSocket.accept();
if (socket != null) {
new ProcessSocketData(socket, this.servletContext).start();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void closeServerSocket() {
try {
if (serverSocket != null && !serverSocket.isClosed()) {
serverSocket.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
class ProcessSocketData extends Thread {
private Socket socket;
private ServletContext servletContext;
public ProcessSocketData() {
super();
}
public ProcessSocketData(Socket socket, ServletContext servletContext) {
this.socket = socket;
this.servletContext = servletContext;
}
@Override
public void run() {
try {
// BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
new BaseBean().writeLog("ServerSocket线程启动");
OutputStreamWriter outputStreamWriter = new OutputStreamWriter(socket.getOutputStream(), StandardCharsets.UTF_8);
PrintWriter pw = new PrintWriter(outputStreamWriter);
InputStream inputStream = 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);
// byte[] data=new byte[length];
char[] data=new char[length];
int datalength = in.read(data,0,length);
String requestData = new String(data);
String s = "";
if (!StringUtil.isEmpty(requestData.toString())) {
new BaseBean().writeLog("requestData",requestData);
s = execute(requestData.toString());
}
// 执行自定义的请求解析方法生成响应response
pw.println(s);
pw.flush(); // 刷新缓冲区
pw.close();
socket.close();
// System.out.println(sb);
} catch (IOException e) {
e.printStackTrace();
System.out.println(e);
}
}
private String execute(String XMLparam){
Map<String, String> paramMap = XMLUtils.parseXMLToMap(XMLparam);
new BaseBean().writeLog(this.getClass().getName()+":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");
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.execute(XMLparam);
return execute;
}
}