代码优化

This commit is contained in:
newpanjing
2017-03-15 09:56:24 +08:00
committed by panjing
parent cb45fe9548
commit 284ac1f5e9
3 changed files with 282 additions and 262 deletions
@@ -1,6 +1,5 @@
package cn.wenat;
import java.sql.Time;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
@@ -23,296 +22,312 @@ import io.socket.client.Socket;
public class LocalServer {
private static final String HTTP_REQUEST = "httpRequest";
private static final String HTTP_REQUEST = "httpRequest";
private static final String HTTP_RESPONSE = "httpResponse";
private static final String HTTP_RESPONSE = "httpResponse";
private static final String BIND_DOMAIN = "bindDomain";
private static final String BIND_DOMAIN = "bindDomain";
private static final String BIND_DOMAIN_NOTICE = "bindDomainNotice";
private static final String BIND_DOMAIN_NOTICE = "bindDomainNotice";
private static final String PING = "clientPing";
private static final String PING = "clientPing";
private static final String PING_NOTICE = "clientPingNotice";
private static final String PING_NOTICE = "clientPingNotice";
private Logger logger = Logger.getLogger(getClass());
private Logger logger = Logger.getLogger(getClass());
private Socket socket;
private Socket socket;
private String server;
private String server;
private String forward;
private String forward;
private String domain;
private String domain;
private long traffic = 0;// 流量统计
private long traffic = 0;// 流量统计
private long speed = 0;// 实时网速统计
private long speed = 0;// 实时网速统计
public void setDomain(String domain) {
this.domain = domain;
}
public void setDomain(String domain) {
public void setForward(String forward) {
this.forward = forward;
}
this.domain = domain;
}
public void setServer(String server) {
this.server = server;
}
public void setForward(String forward) {
private CallListener callListener;
this.forward = forward;
}
public void setCallListener(CallListener callListener) {
this.callListener = callListener;
}
public void setServer(String server) {
public void ping() {
if (socket == null) {
return;
}
socket.emit(PING, System.currentTimeMillis());
}
this.server = server;
}
public void bindDomain() {
private CallListener callListener;
socket.emit(BIND_DOMAIN, domain);
public void setCallListener(CallListener callListener) {
}
this.callListener = callListener;
}
public void start() throws Exception {
public void ping() {
Options opts = new Options();
opts.transports = new String[] { "websocket", "polling" };
socket = IO.socket(server, opts);
if (socket == null) {
return;
}
socket.emit(PING, System.currentTimeMillis());
}
Map<String, String> eventMapper = new HashMap<String, String>();
public void bindDomain() {
eventMapper.put(Socket.EVENT_DISCONNECT, "断开连接");
eventMapper.put(Socket.EVENT_ERROR, "断开错误");
eventMapper.put(Socket.EVENT_CONNECTING, "正在连接服务器");
eventMapper.put(Socket.EVENT_CONNECT_TIMEOUT, "连接服务器超时");
eventMapper.put(Socket.EVENT_RECONNECTING, "自动重连服务器");
eventMapper.put(Socket.EVENT_RECONNECT, "准备重连服务器");
eventMapper.put(Socket.EVENT_CONNECT, "连接服务器成功");
eventMapper.put(HTTP_REQUEST, null);
eventMapper.put(BIND_DOMAIN_NOTICE, null);
eventMapper.put(PING_NOTICE, null);
Set<String> keys = eventMapper.keySet();
// 注册事件和提示信息
for (String k : keys) {
SocketListener socketListener = new SocketListener() {
socket.emit(BIND_DOMAIN, domain);
@Override
public void eventCall(String eventName, String message, Object... args) {
if (null != message) {
callListener.eventCall("[" + eventName + "]" + message);
}
switch (eventName) {
case Socket.EVENT_CONNECT:
callListener.statusCall("连接服务器成功");
LocalServer.this.bindDomain();
LocalServer.this.ping();
break;
case HTTP_REQUEST:
handlerRequest(args);
break;
case BIND_DOMAIN_NOTICE:
handlerBindDomain(args);
break;
case PING_NOTICE:
handlerPing(args);
break;
default:
break;
}
}
}
};
socketListener.setEventName(k);
socketListener.setMessage(eventMapper.get(k));
socket.on(k, socketListener);
}
socket.connect();
public void start() throws Exception {
// 注册回调事件,实时统计网络速率
Options opts = new Options();
opts.transports = new String[]{"websocket", "polling"};
socket = IO.socket(server, opts);
TimerTask task = new TimerTask() {
Map<String, String> eventMapper = new HashMap<String, String>();
@Override
public void run() {
long temp = speed;
speed = 0;
callListener.speedCall(temp);
eventMapper.put(Socket.EVENT_DISCONNECT, "断开连接");
eventMapper.put(Socket.EVENT_ERROR, "断开错误");
eventMapper.put(Socket.EVENT_CONNECTING, "正在连接服务器");
eventMapper.put(Socket.EVENT_CONNECT_TIMEOUT, "连接服务器超时");
eventMapper.put(Socket.EVENT_RECONNECTING, "自动重连服务器");
eventMapper.put(Socket.EVENT_RECONNECT, "准备重连服务器");
eventMapper.put(Socket.EVENT_CONNECT, "连接服务器成功");
eventMapper.put(HTTP_REQUEST, null);
eventMapper.put(BIND_DOMAIN_NOTICE, null);
eventMapper.put(PING_NOTICE, null);
Set<String> keys = eventMapper.keySet();
// 注册事件和提示信息
for (String k : keys) {
SocketListener socketListener = new SocketListener() {
}
};
Timer timer = new Timer();
timer.scheduleAtFixedRate(task, 0, 1000);
new Timer().scheduleAtFixedRate(new TimerTask() {
@Override
public void eventCall(String eventName, String message, Object... args) {
@Override
public void run() {
ping();
}
}, 0, 10000);
}
if (null != message) {
callListener.eventCall("[" + eventName + "]" + message);
}
switch (eventName) {
case Socket.EVENT_CONNECT:
callListener.statusCall("连接服务器成功");
LocalServer.this.bindDomain();
LocalServer.this.ping();
break;
case HTTP_REQUEST:
handlerRequest(args);
break;
case BIND_DOMAIN_NOTICE:
handlerBindDomain(args);
break;
case PING_NOTICE:
handlerPing(args);
break;
default:
break;
}
}
private void handlerPing(Object[] args) {
long time = (long) args[0];
long ms = System.currentTimeMillis() - time;
callListener.ping(ms);
}
};
socketListener.setEventName(k);
socketListener.setMessage(eventMapper.get(k));
socket.on(k, socketListener);
}
socket.connect();
private void handlerBindDomain(Object... args) {
try {
org.json.JSONObject jsonObject = (org.json.JSONObject) args[0];
int code = jsonObject.getInt("code");
String msg = jsonObject.getString("msg");
if (code == 1000) {
// 弹出地址
} else {
// 断开链接
socket.close();
callListener.onClose();
}
callListener.eventCall("[绑定域名]:" + msg);
} catch (Exception e) {
logger.error(e);
}
}
// 注册回调事件,实时统计网络速率
/**
* 处理远程的http请求
*
* @param args
*/
private void handlerRequest(Object... args) {
org.json.JSONObject object = (org.json.JSONObject) args[0];
JSONObject request = JSON.parseObject(object.toString());
String url = request.getString("url");
Map<String, Object> headers = request.getJSONObject("headers");
headers.remove("content-length");
String method = request.getString("method");
String eventName = request.getString("eventName");
TimerTask task = new TimerTask() {
Map<String, Object> params = request.getJSONObject("params");
@Override
public void run() {
String reqUrl = forward + url;
logger.info("收到请求: methon=" + method + " url=" + reqUrl);
if (callListener != null) {
callListener.eventCall("[远程请求]: methon=" + method + " url=" + reqUrl + " params:" + params + " headers:" + headers);
}
Response response = null;
// 发送请求
// 替换host
Set<String> keys = headers.keySet();
if ("POST".equals(method.toUpperCase())) {
long temp = speed;
speed = 0;
callListener.speedCall(temp);
// 查看是否是json或者xml请求一类
String encoding = "utf-8";
String contentType = null;
if (headers.get("content-type") != null) {
contentType = headers.get("content-type").toString();
String[] array = contentType.split(";");
contentType = array[0];
if (array.length > 1) {
String[] charsets = array[1].split("=");
if (charsets.length > 1) {
encoding = charsets[1];
}
}
}
HttpPost post = new HttpPost(reqUrl);
for (String k : keys) {
post.addHeader(k, String.valueOf(headers.get(k)));
}
}
};
Timer timer = new Timer();
timer.scheduleAtFixedRate(task, 0, 1000);
new Timer().scheduleAtFixedRate(new TimerTask() {
try {
// 默认类型application/x-www-form-urlencoded
if (contentType == null) {
contentType = "application/x-www-form-urlencoded";
}
@Override
public void run() {
// 兼容普通post和json/xml post
if (contentType.equals("application/x-www-form-urlencoded")) {
response = HttpClientUtils.post(post, params);
}else {
//其他的全部postBody
response = HttpClientUtils.postBody(post, request.getString("body"), encoding);
}
} catch (Exception e) {
response = new Response();
response.setStatusCode(500);
response.setStatusMessage("本地服务器报错:" + e.getMessage());
}
ping();
}
}, 0, 10000);
}
} else if ("GET".equals(method.toUpperCase())) {
HttpGet get = new HttpGet(reqUrl);
for (String k : keys) {
get.addHeader(k, String.valueOf(headers.get(k)));
}
try {
response = HttpClientUtils.get(get);
} catch (Exception e) {
response = new Response();
response.setStatusCode(500);
response.setStatusMessage("本地服务器报错:" + e.getMessage());
}
} else {
// 提示请求不支持
response = new Response();
response.setStatusCode(500);
response.setEncoding("utf-8");
response.setStatusMessage(method + "请求类型暂时不支持!");
}
org.json.JSONObject jsonObject = new org.json.JSONObject();
try {
private void handlerPing(Object[] args) {
// 处理重定向
if (response.getStatusCode() == 302 || response.getStatusCode() == 307 || response.getStatusCode() == 303) {
// 处理地址
String localtion = response.getHeaders().get("Location");
localtion.replace(server, domain);
response.getHeaders().put("Location", localtion);
}
long time = (long) args[0];
long ms = System.currentTimeMillis() - time;
callListener.ping(ms);
}
byte[] bytes = (byte[]) response.getBody();
long length = bytes.length;
this.traffic += length;
this.speed += length;
jsonObject.put("body", response.getBody());
jsonObject.put("headers", response.getHeaders());
jsonObject.put("statusCode", response.getStatusCode());
jsonObject.put("encoding", response.getEncoding());
jsonObject.put("statusMessage", response.getStatusMessage());
jsonObject.put("eventName", eventName);
} catch (JSONException e) {
e.printStackTrace();
}
logger.info("请求响应:" + response);
if (callListener != null) {
callListener.eventCall("[目标响应]:" + response);
}
if (socket == null) {
callListener.eventCall("[服务关闭] The service has been closed.");
return;
}
socket.emit(HTTP_RESPONSE, jsonObject);
// 通知界面显示流量
callListener.trafficCall(this.traffic);
}
private void handlerBindDomain(Object... args) {
public void stop() {
if (socket != null) {
socket.close();
socket = null;
}
callListener.ping(0l);
}
try {
org.json.JSONObject jsonObject = (org.json.JSONObject) args[0];
int code = jsonObject.getInt("code");
String msg = jsonObject.getString("msg");
if (code == 1000) {
// 弹出地址
} else {
// 断开链接
socket.close();
callListener.onClose();
}
callListener.eventCall("[绑定域名]:" + msg);
} catch (Exception e) {
logger.error(e);
}
}
public static void main(String[] args) throws Exception {
new MainForm().setVisible(true);
/**
* 处理远程的http请求
*
* @param args
*/
private void handlerRequest(Object... args) {
}
org.json.JSONObject object = (org.json.JSONObject) args[0];
JSONObject request = JSON.parseObject(object.toString());
String url = request.getString("url");
Map<String, Object> headers = request.getJSONObject("headers");
headers.remove("content-length");
String method = request.getString("method");
String eventName = request.getString("eventName");
Map<String, Object> params = request.getJSONObject("params");
String reqUrl = forward + url;
logger.info("收到请求: methon=" + method + " url=" + reqUrl);
if (callListener != null) {
callListener.eventCall("[远程请求]: methon=" + method + " url=" + reqUrl + " params:" + params + " headers:" + headers);
}
Response response = null;
// 发送请求
// 替换host
Set<String> keys = headers.keySet();
if ("POST".equals(method.toUpperCase())) {
// 查看是否是json或者xml请求一类
String encoding = "utf-8";
String contentType = null;
if (headers.get("content-type") != null) {
contentType = headers.get("content-type").toString();
String[] array = contentType.split(";");
contentType = array[0];
if (array.length > 1) {
String[] charsets = array[1].split("=");
if (charsets.length > 1) {
encoding = charsets[1];
}
}
}
HttpPost post = new HttpPost(reqUrl);
for (String k : keys) {
post.addHeader(k, String.valueOf(headers.get(k)));
}
try {
// 默认类型application/x-www-form-urlencoded
if (contentType == null) {
contentType = "application/x-www-form-urlencoded";
}
// 兼容普通post和json/xml post
if (contentType.equals("application/x-www-form-urlencoded")) {
response = HttpClientUtils.post(post, request.getJSONObject("body"));
} else {
//其他的全部postBody
response = HttpClientUtils.postBody(post, request.getString("body"), encoding);
}
} catch (Exception e) {
response = new Response();
response.setStatusCode(500);
response.setStatusMessage("本地服务器报错:" + e.getMessage());
}
} else if ("GET".equals(method.toUpperCase())) {
HttpGet get = new HttpGet(reqUrl);
for (String k : keys) {
get.addHeader(k, String.valueOf(headers.get(k)));
}
try {
response = HttpClientUtils.get(get);
} catch (Exception e) {
response = new Response();
response.setStatusCode(500);
response.setStatusMessage("本地服务器报错:" + e.getMessage());
}
} else {
// 提示请求不支持
response = new Response();
response.setStatusCode(500);
response.setEncoding("utf-8");
response.setStatusMessage(method + "请求类型暂时不支持!");
}
org.json.JSONObject jsonObject = new org.json.JSONObject();
try {
// 处理重定向
if (response.getStatusCode() == 302 || response.getStatusCode() == 307 || response.getStatusCode() == 303) {
// 处理地址
String localtion = response.getHeaders().get("Location");
localtion.replace(server, domain);
response.getHeaders().put("Location", localtion);
}
byte[] bytes = (byte[]) response.getBody();
if (bytes == null) {
bytes = new byte[]{};
}
long length = bytes.length;
this.traffic += length;
this.speed += length;
jsonObject.put("body", response.getBody());
jsonObject.put("headers", response.getHeaders());
jsonObject.put("statusCode", response.getStatusCode());
jsonObject.put("encoding", response.getEncoding());
jsonObject.put("statusMessage", response.getStatusMessage());
jsonObject.put("eventName", eventName);
} catch (JSONException e) {
e.printStackTrace();
}
logger.info("请求响应:" + response);
if (callListener != null) {
callListener.eventCall("[目标响应]:" + response);
}
if (socket == null) {
callListener.eventCall("[服务关闭] The service has been closed.");
return;
}
socket.emit(HTTP_RESPONSE, jsonObject);
// 通知界面显示流量
callListener.trafficCall(this.traffic);
}
public void stop() {
if (socket != null) {
socket.close();
socket = null;
}
callListener.ping(0l);
}
public static void main(String[] args) throws Exception {
new MainForm().setVisible(true);
}
}
@@ -7,23 +7,28 @@ import java.awt.event.WindowEvent;
import javax.swing.ImageIcon;
import javax.swing.JFrame;
/**
* 父类
*/
public class BaseForm extends JFrame {
private static final long serialVersionUID = -8446051052250946428L;
private static final long serialVersionUID = -8446051052250946428L;
public BaseForm() {
getContentPane().setLayout(null);
getContentPane().setBackground(new Color(248, 251, 253));
this.addWindowListener(new WindowAdapter() {
public BaseForm() {
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
super.windowClosing(e);
}
});
ImageIcon imageIcon = new ImageIcon(getClass().getResource("/logo.png"));
getContentPane().setLayout(null);
getContentPane().setBackground(new Color(248, 251, 253));
this.addWindowListener(new WindowAdapter() {
this.setIconImage(imageIcon.getImage());
}
@Override
public void windowClosing(WindowEvent e) {
System.exit(0);
super.windowClosing(e);
}
});
ImageIcon imageIcon = new ImageIcon(getClass().getResource("/logo.png"));
this.setIconImage(imageIcon.getImage());
}
}
@@ -191,7 +191,7 @@ public class HttpClientUtils {
}
HttpEntity httpEntity = new UrlEncodedFormEntity(basicNameValuePairs, DEFAULT_ENCODING);
httpPost.setEntity(httpEntity);
}
CloseableHttpResponse response = getClient().execute(httpPost);