Skip to content
This repository has been archived by the owner on Jun 5, 2018. It is now read-only.

Commit

Permalink
fix #27
Browse files Browse the repository at this point in the history
  • Loading branch information
hellokaton committed Feb 28, 2017
1 parent 50ddae4 commit 6a4a03b
Show file tree
Hide file tree
Showing 3 changed files with 119 additions and 16 deletions.
18 changes: 9 additions & 9 deletions src/main/java/me/biezhi/wechat/service/WechatService.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,27 +12,27 @@ public interface WechatService {
* 获取UUID
* @return
*/
String getUUID() throws WechatException;
String getUUID();

/**
* 微信初始化
* @param wechatMeta
* @throws WechatException
*/
void wxInit(WechatMeta wechatMeta) throws WechatException;
void wxInit(WechatMeta wechatMeta);

/**
* 开启状态通知
* @return
*/
void openStatusNotify(WechatMeta wechatMeta) throws WechatException;
void openStatusNotify(WechatMeta wechatMeta);

/**
* 获取联系人
* @param wechatMeta
* @return
*/
WechatContact getContact(WechatMeta wechatMeta) throws WechatException;
WechatContact getContact(WechatMeta wechatMeta);

/**
* 选择同步线路
Expand All @@ -41,26 +41,26 @@ public interface WechatService {
* @return
* @throws WechatException
*/
void choiceSyncLine(WechatMeta wechatMeta) throws WechatException;
void choiceSyncLine(WechatMeta wechatMeta);

/**
* 消息检查
* @param wechatMeta
* @return
*/
int[] syncCheck(WechatMeta wechatMeta) throws WechatException;
int[] syncCheck(WechatMeta wechatMeta);

/**
* 处理聊天信息
* @param wechatRequest
* @param wechatMeta
* @param data
*/
void handleMsg(WechatMeta wechatMeta, JSONObject data) throws WechatException;
void handleMsg(WechatMeta wechatMeta, JSONObject data);

/**
* 获取最新消息
* @param meta
* @return
*/
JSONObject webwxsync(WechatMeta meta) throws WechatException;
JSONObject webwxsync(WechatMeta meta);
}
26 changes: 19 additions & 7 deletions src/main/java/me/biezhi/wechat/service/WechatServiceImpl.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
package me.biezhi.wechat.service;

import java.io.File;
import java.util.concurrent.TimeUnit;

import me.biezhi.wechat.util.PingUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

Expand Down Expand Up @@ -164,7 +166,7 @@ private void getGroup(WechatMeta wechatMeta, WechatContact wechatContact) {
* 获取UUID
*/
@Override
public String getUUID() throws WechatException {
public String getUUID() {
HttpRequest request = HttpRequest.get(Constant.JS_LOGIN_URL, true, "appid", "wx782c26e4c19acffb", "fun", "new",
"lang", "zh_CN", "_", DateKit.getCurrentUnixTime());

Expand All @@ -190,7 +192,7 @@ public String getUUID() throws WechatException {
* 打开状态提醒
*/
@Override
public void openStatusNotify(WechatMeta wechatMeta) throws WechatException {
public void openStatusNotify(WechatMeta wechatMeta) {

String url = wechatMeta.getBase_uri() + "/webwxstatusnotify?lang=zh_CN&pass_ticket=" + wechatMeta.getPass_ticket();

Expand Down Expand Up @@ -230,7 +232,7 @@ public void openStatusNotify(WechatMeta wechatMeta) throws WechatException {
* 微信初始化
*/
@Override
public void wxInit(WechatMeta wechatMeta) throws WechatException {
public void wxInit(WechatMeta wechatMeta) {
String url = wechatMeta.getBase_uri() + "/webwxinit?r=" + DateKit.getCurrentUnixTime() + "&pass_ticket="
+ wechatMeta.getPass_ticket() + "&skey=" + wechatMeta.getSkey();

Expand Down Expand Up @@ -276,7 +278,7 @@ public void wxInit(WechatMeta wechatMeta) throws WechatException {
* 选择同步线路
*/
@Override
public void choiceSyncLine(WechatMeta wechatMeta) throws WechatException {
public void choiceSyncLine(WechatMeta wechatMeta) {
boolean enabled = false;
for(String syncUrl : Constant.SYNC_HOST){
int[] res = this.syncCheck(syncUrl, wechatMeta);
Expand All @@ -297,14 +299,24 @@ public void choiceSyncLine(WechatMeta wechatMeta) throws WechatException {
* 检测心跳
*/
@Override
public int[] syncCheck(WechatMeta wechatMeta) throws WechatException{
public int[] syncCheck(WechatMeta wechatMeta){
return this.syncCheck(null, wechatMeta);
}

/**
* 检测心跳
*/
private int[] syncCheck(String url, WechatMeta meta) throws WechatException{
private int[] syncCheck(String url, WechatMeta meta){

// 如果网络中断,休息10秒
if(PingUtil.netIsOver()){
try {
TimeUnit.SECONDS.sleep(10);
} catch (Exception e){
LOGGER.error("", e);
}
}

if(null == url){
url = meta.getWebpush_url() + "/synccheck";
} else{
Expand Down Expand Up @@ -435,7 +447,7 @@ private String getUserRemarkName(String id) {
}

@Override
public JSONObject webwxsync(WechatMeta meta) throws WechatException{
public JSONObject webwxsync(WechatMeta meta){

String url = meta.getBase_uri() + "/webwxsync?skey=" + meta.getSkey() + "&sid=" + meta.getWxsid();

Expand Down
91 changes: 91 additions & 0 deletions src/main/java/me/biezhi/wechat/util/PingUtil.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
package me.biezhi.wechat.util;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class PingUtil {

public static boolean ping(String ipAddress) throws Exception {
int timeOut = 3000 ; //超时应该在3钞以上
boolean status = InetAddress.getByName(ipAddress).isReachable(timeOut); // 当返回值是true时,说明host是可用的,false则不可。
return status;
}

/**
* 返回是否能ping通
* @param ipAddress
* @return
* @throws Exception
*/
public static boolean ping02(String ipAddress) throws Exception {
String line = null;
try {
Process pro = Runtime.getRuntime().exec("ping " + ipAddress);
BufferedReader buf = new BufferedReader(new InputStreamReader(pro.getInputStream()));
while ((line = buf.readLine()) != null){
if(line.startsWith("PING")){
continue;
}
if(line.indexOf("timeout") != -1){
return false;
}
return true;
}
return false;
} catch (Exception ex) {
return false;
}
}

public static boolean ping(String ipAddress, int pingTimes, int timeOut) {
BufferedReader in = null;
Runtime r = Runtime.getRuntime(); // 将要执行的ping命令,此命令是windows格式的命令
String pingCommand = "ping " + ipAddress + " -n " + pingTimes + " -w " + timeOut;
try { // 执行命令并获取输出
System.out.println(pingCommand);
Process p = r.exec(pingCommand);
if (p == null) {
return false;
}
in = new BufferedReader(new InputStreamReader(p.getInputStream())); // 逐行检查输出,计算类似出现=23ms TTL=62字样的次数
int connectedCount = 0;
String line = null;
while ((line = in.readLine()) != null) {
connectedCount += getCheckResult(line);
} // 如果出现类似=23ms TTL=62这样的字样,出现的次数=测试次数则返回真
return connectedCount == pingTimes;
} catch (Exception ex) {
ex.printStackTrace(); // 出现异常则返回假
return false;
} finally {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
//若line含有=18ms TTL=16字样,说明已经ping通,返回1,否則返回0.
private static int getCheckResult(String line) { // System.out.println("控制台输出的结果为:"+line);
Pattern pattern = Pattern.compile("(\\d+ms)(\\s+)(TTL=\\d+)", Pattern.CASE_INSENSITIVE);
Matcher matcher = pattern.matcher(line);
while (matcher.find()) {
return 1;
}
return 0;
}

public static boolean netIsOver(){
try {
return !ping02("114.114.114.114");
} catch (Exception e){
return true;
}
}


}

0 comments on commit 6a4a03b

Please sign in to comment.