diff --git a/app/src/main/java/com/idormy/sms/forwarder/CrashHandler.java b/app/src/main/java/com/idormy/sms/forwarder/CrashHandler.java index 11a1d60e..d9c0934d 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/CrashHandler.java +++ b/app/src/main/java/com/idormy/sms/forwarder/CrashHandler.java @@ -89,7 +89,6 @@ public class CrashHandler implements UncaughtExceptionHandler { /** * 自定义错误处理,收集错误信息 发送错误报告等操作均在此完成 * - * @param ex * @return true:如果处理了该异常信息;否则返回false. */ private boolean handleException(Throwable ex) { diff --git a/app/src/main/java/com/idormy/sms/forwarder/MainActivity.java b/app/src/main/java/com/idormy/sms/forwarder/MainActivity.java index 383b8e0a..96bbee82 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/MainActivity.java +++ b/app/src/main/java/com/idormy/sms/forwarder/MainActivity.java @@ -347,9 +347,9 @@ public class MainActivity extends AppCompatActivity implements RefreshListView.I builder.setTitle(R.string.details); String simInfo = logVo.getSimInfo(); if (simInfo != null) { - builder.setMessage(logVo.getFrom() + "\n\n" + logVo.getContent() + "\n\n" + logVo.getSimInfo() + "\n\n" + logVo.getRule() + "\n\n" + TimeUtil.utc2Local(logVo.getTime()) + "\n\nResponse:" + logVo.getForwardResponse()); + builder.setMessage("来源:" + logVo.getFrom() + "\n\n" + "消息:" + logVo.getContent() + "\n\n" + "卡槽:" + logVo.getSimInfo() + "\n\n" + "规则:" + logVo.getRule() + "\n\n" + "时间:" + TimeUtil.utc2Local(logVo.getTime()) + "\n\n转发结果:\n" + logVo.getForwardResponse()); } else { - builder.setMessage(logVo.getFrom() + "\n\n" + logVo.getContent() + "\n\n" + logVo.getRule() + "\n\n" + TimeUtil.utc2Local(logVo.getTime()) + "\n\nResponse:" + logVo.getForwardResponse()); + builder.setMessage("来源:" + logVo.getFrom() + "\n\n" + "消息:" + logVo.getContent() + "\n\n" + "规则:" + logVo.getRule() + "\n\n" + "时间:" + TimeUtil.utc2Local(logVo.getTime()) + "\n\n转发结果:\n" + logVo.getForwardResponse()); } //删除 builder.setNegativeButton(R.string.del, (dialog, which) -> { diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/HttpServer.java b/app/src/main/java/com/idormy/sms/forwarder/sender/HttpServer.java index f2d0b576..ee534b99 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/HttpServer.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/HttpServer.java @@ -16,9 +16,9 @@ import org.eclipse.jetty.server.Server; public class HttpServer { + private static final int port = 5000; private static Boolean hasInit = false; private static Server jettyServer; - private static final int port = 5000; @SuppressLint("StaticFieldLeak") private static Context context; private static long ts = 0L; diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/RetryIntercepter.java b/app/src/main/java/com/idormy/sms/forwarder/sender/RetryIntercepter.java index 6aaeb31b..da3efca4 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/RetryIntercepter.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/RetryIntercepter.java @@ -15,9 +15,9 @@ import okhttp3.Response; public class RetryIntercepter implements Interceptor { static final String TAG = "RetryIntercepter"; - public int executionCount;//最大重试次数 private final long retryInterval;//重试的间隔 private final long logId;//更新记录ID + public final int executionCount;//最大重试次数 RetryIntercepter(Builder builder) { this.executionCount = builder.executionCount; @@ -28,37 +28,38 @@ public class RetryIntercepter implements Interceptor { @NonNull @Override public Response intercept(Chain chain) throws IOException { + int retryTimes = 0; Request request = chain.request(); - Response response = doRequest(chain, request); - int retryNum = 0; - while ((response == null || !response.isSuccessful()) && retryNum <= executionCount) { - Log.w(TAG, "第 " + retryNum + " 次请求"); - if (retryNum > 0) { - final long nextInterval = retryNum * getRetryInterval(); + Response response; + do { + if (retryTimes > 0 && getRetryInterval() > 0) { + final long delayTime = retryTimes * getRetryInterval(); try { - Log.w(TAG, "等待 " + nextInterval + " 秒后重试!"); + Log.w(TAG, "第 " + retryTimes + " 次重试,休眠 " + delayTime + " 秒"); //noinspection BusyWait - Thread.sleep(nextInterval * 1000); + Thread.sleep(delayTime * 1000); } catch (final InterruptedException e) { Thread.currentThread().interrupt(); throw new InterruptedIOException(e.getMessage()); } } - retryNum++; - response = doRequest(chain, request); - } - if (response == null) throw new InterruptedIOException("服务端无应答"); + response = doRequest(chain, request, retryTimes); + retryTimes++; + } while ((response == null || !response.isSuccessful()) && retryTimes <= executionCount); + + if (response == null) throw new InterruptedIOException("服务端无应答,结束重试"); return response; } - private Response doRequest(Chain chain, Request request) { + private Response doRequest(Chain chain, Request request, int retryTimes) { Response response = null; try { response = chain.proceed(request); } catch (Exception e) { - LogUtil.updateLog(logId, 1, e.getMessage()); - Log.w(TAG, e.getMessage()); + String resp = retryTimes > 0 ? "第" + retryTimes + "次重试:" + e.getMessage() : e.getMessage(); + LogUtil.updateLog(logId, 1, resp); + Log.w(TAG, resp); } return response; } diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SendUtil.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SendUtil.java index d0042e86..854b8854 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SendUtil.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SendUtil.java @@ -118,7 +118,7 @@ public class SendUtil { } RuleUtil.init(context); - List ruleList = RuleUtil.getRule(null, key, logVo.getType()); + List ruleList = RuleUtil.getRule(null, key, logVo.getType(), "1"); //只取已启用的规则 if (!ruleList.isEmpty()) { SenderUtil.init(context); for (RuleModel ruleModel : ruleList) { @@ -167,24 +167,14 @@ public class SendUtil { } } - @SuppressWarnings("ResultOfMethodCallIgnored") public static void senderSendMsgNoHandError(SmsVo smsVo, SenderModel senderModel, long logId, String smsTemplate, String regexReplace) { - //网络请求+重试比较耗时,创建子线程处理 + //网络请求+延时重试比较耗时,创建子线程处理 new Thread(() -> { try { - //是否需要失败重试 int retryTimes = SettingUtil.getRetryTimes(); - if (retryTimes < 1) { - SendUtil.senderSendMsg(null, null, smsVo, senderModel, logId, smsTemplate, regexReplace); - } else { - int delayTime = SettingUtil.getDelayTime(); - RetryIntercepter retryInterceptor = new RetryIntercepter.Builder() - .executionCount(retryTimes) - .retryInterval(delayTime) - .logId(logId) - .build(); - SendUtil.senderSendMsg(null, retryInterceptor, smsVo, senderModel, logId, smsTemplate, regexReplace); - } + int delayTime = SettingUtil.getDelayTime(); + RetryIntercepter retryInterceptor = retryTimes < 1 ? null : new RetryIntercepter.Builder().executionCount(retryTimes).retryInterval(delayTime).logId(logId).build(); + SendUtil.senderSendMsg(null, retryInterceptor, smsVo, senderModel, logId, smsTemplate, regexReplace); } catch (Exception e) { Log.e(TAG, e.getMessage()); } diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderBarkMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderBarkMsg.java index 3b8d77f9..0167ff75 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderBarkMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderBarkMsg.java @@ -3,6 +3,8 @@ package com.idormy.sms.forwarder.sender; import android.os.Handler; import android.util.Log; +import androidx.annotation.NonNull; + import com.idormy.sms.forwarder.utils.Define; import com.idormy.sms.forwarder.utils.LogUtil; @@ -13,6 +15,8 @@ import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; +import okhttp3.Call; +import okhttp3.Callback; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; @@ -64,20 +68,27 @@ public class SenderBarkMsg extends SenderBaseMsg { final Request request = new Request.Builder().url(requestUrl).get().build(); - try (Response response = client.newCall(request).execute()) { - if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); - - final String responseStr = Objects.requireNonNull(response.body()).string(); - Log.d(TAG, "Response:" + response.code() + "," + responseStr); - Toast(handError, TAG, "发送状态:" + responseStr); + client.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(@NonNull Call call, @NonNull final IOException e) { + LogUtil.updateLog(logId, 0, e.getMessage()); + Toast(handError, TAG, "发送失败:" + e.getMessage()); + } - //TODO:粗略解析是否发送成功 - if (responseStr.contains("\"message\":\"success\"")) { - LogUtil.updateLog(logId, 2, responseStr); - } else { - LogUtil.updateLog(logId, 0, responseStr); + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { + final String responseStr = Objects.requireNonNull(response.body()).string(); + Log.d(TAG, "Response:" + response.code() + "," + responseStr); + Toast(handError, TAG, "发送状态:" + responseStr); + + //TODO:粗略解析是否发送成功 + if (responseStr.contains("\"message\":\"success\"")) { + LogUtil.updateLog(logId, 2, responseStr); + } else { + LogUtil.updateLog(logId, 0, responseStr); + } } - } + }); } diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderDingdingMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderDingdingMsg.java index 2309014e..1cbd5e91 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderDingdingMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderDingdingMsg.java @@ -5,6 +5,8 @@ import android.text.TextUtils; import android.util.Base64; import android.util.Log; +import androidx.annotation.NonNull; + import com.alibaba.fastjson.JSON; import com.idormy.sms.forwarder.utils.Define; import com.idormy.sms.forwarder.utils.LogUtil; @@ -22,6 +24,8 @@ import java.util.concurrent.TimeUnit; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; +import okhttp3.Call; +import okhttp3.Callback; import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; @@ -103,20 +107,27 @@ public class SenderDingdingMsg extends SenderBaseMsg { .post(requestBody) .build(); - try (Response response = client.newCall(request).execute()) { - if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); - - final String responseStr = Objects.requireNonNull(response.body()).string(); - Log.d(TAG, "Response:" + response.code() + "," + responseStr); - Toast(handError, TAG, "发送状态:" + responseStr); + client.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(@NonNull Call call, @NonNull final IOException e) { + LogUtil.updateLog(logId, 0, e.getMessage()); + Toast(handError, TAG, "发送失败:" + e.getMessage()); + } - //TODO:粗略解析是否发送成功 - if (responseStr.contains("\"errcode\":0")) { - LogUtil.updateLog(logId, 2, responseStr); - } else { - LogUtil.updateLog(logId, 0, responseStr); + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { + final String responseStr = Objects.requireNonNull(response.body()).string(); + Log.d(TAG, "Response:" + response.code() + "," + responseStr); + Toast(handError, TAG, "发送状态:" + responseStr); + + //TODO:粗略解析是否发送成功 + if (responseStr.contains("\"errcode\":0")) { + LogUtil.updateLog(logId, 2, responseStr); + } else { + LogUtil.updateLog(logId, 0, responseStr); + } } - } + }); } diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderFeishuMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderFeishuMsg.java index f474a6f2..82bc2f5e 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderFeishuMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderFeishuMsg.java @@ -4,6 +4,8 @@ import android.os.Handler; import android.util.Base64; import android.util.Log; +import androidx.annotation.NonNull; + import com.alibaba.fastjson.JSON; import com.idormy.sms.forwarder.utils.Define; import com.idormy.sms.forwarder.utils.LogUtil; @@ -22,6 +24,8 @@ import java.util.concurrent.TimeUnit; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; +import okhttp3.Call; +import okhttp3.Callback; import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; @@ -137,20 +141,28 @@ public class SenderFeishuMsg extends SenderBaseMsg { .addHeader("Content-Type", "application/json; charset=utf-8") .post(requestBody) .build(); - try (Response response = client.newCall(request).execute()) { - if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); - - final String responseStr = Objects.requireNonNull(response.body()).string(); - Log.d(TAG, "Response:" + response.code() + "," + responseStr); - Toast(handError, TAG, "发送状态:" + responseStr); - - //TODO:粗略解析是否发送成功 - if (responseStr.contains("\"StatusCode\":0")) { - LogUtil.updateLog(logId, 2, responseStr); - } else { - LogUtil.updateLog(logId, 0, responseStr); + + client.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(@NonNull Call call, @NonNull final IOException e) { + LogUtil.updateLog(logId, 0, e.getMessage()); + Toast(handError, TAG, "发送失败:" + e.getMessage()); } - } + + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { + final String responseStr = Objects.requireNonNull(response.body()).string(); + Log.d(TAG, "Response:" + response.code() + "," + responseStr); + Toast(handError, TAG, "发送状态:" + responseStr); + + //TODO:粗略解析是否发送成功 + if (responseStr.contains("\"StatusCode\":0")) { + LogUtil.updateLog(logId, 2, responseStr); + } else { + LogUtil.updateLog(logId, 0, responseStr); + } + } + }); } diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderGotifyMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderGotifyMsg.java index 3284234c..25e7d557 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderGotifyMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderGotifyMsg.java @@ -3,6 +3,8 @@ package com.idormy.sms.forwarder.sender; import android.os.Handler; import android.util.Log; +import androidx.annotation.NonNull; + import com.idormy.sms.forwarder.model.vo.GotifySettingVo; import com.idormy.sms.forwarder.utils.Define; import com.idormy.sms.forwarder.utils.LogUtil; @@ -11,6 +13,8 @@ import java.io.IOException; import java.util.Objects; import java.util.concurrent.TimeUnit; +import okhttp3.Call; +import okhttp3.Callback; import okhttp3.FormBody; import okhttp3.OkHttpClient; import okhttp3.Request; @@ -46,20 +50,28 @@ public class SenderGotifyMsg extends SenderBaseMsg { .build(); Request request = new Request.Builder().url(requestUrl).post(formBody).build(); - try (Response response = client.newCall(request).execute()) { - if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); - - final String responseStr = Objects.requireNonNull(response.body()).string(); - Log.d(TAG, "Response:" + response.code() + "," + responseStr); - Toast(handError, TAG, "发送状态:" + responseStr); - - //TODO:粗略解析是否发送成功 - if (response.isSuccessful()) { - LogUtil.updateLog(logId, 2, responseStr); - } else { - LogUtil.updateLog(logId, 1, responseStr); + + client.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(@NonNull Call call, @NonNull final IOException e) { + LogUtil.updateLog(logId, 0, e.getMessage()); + Toast(handError, TAG, "发送失败:" + e.getMessage()); + } + + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { + final String responseStr = Objects.requireNonNull(response.body()).string(); + Log.d(TAG, "Response:" + response.code() + "," + responseStr); + Toast(handError, TAG, "发送状态:" + responseStr); + + //TODO:粗略解析是否发送成功 + if (response.isSuccessful()) { + LogUtil.updateLog(logId, 2, responseStr); + } else { + LogUtil.updateLog(logId, 0, responseStr); + } } - } + }); } diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderPushPlusMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderPushPlusMsg.java index 6668d105..a79585bd 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderPushPlusMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderPushPlusMsg.java @@ -3,6 +3,8 @@ package com.idormy.sms.forwarder.sender; import android.os.Handler; import android.util.Log; +import androidx.annotation.NonNull; + import com.alibaba.fastjson.JSON; import com.idormy.sms.forwarder.model.vo.PushPlusSettingVo; import com.idormy.sms.forwarder.utils.Define; @@ -14,6 +16,8 @@ import java.util.Map; import java.util.Objects; import java.util.concurrent.TimeUnit; +import okhttp3.Call; +import okhttp3.Callback; import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; @@ -89,20 +93,27 @@ public class SenderPushPlusMsg extends SenderBaseMsg { .post(requestBody) .build(); - try (Response response = client.newCall(request).execute()) { - if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); - - final String responseStr = Objects.requireNonNull(response.body()).string(); - Log.d(TAG, "Response:" + response.code() + "," + responseStr); - Toast(handError, TAG, "发送状态:" + responseStr); + client.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(@NonNull Call call, @NonNull final IOException e) { + LogUtil.updateLog(logId, 0, e.getMessage()); + Toast(handError, TAG, "发送失败:" + e.getMessage()); + } - //TODO:粗略解析是否发送成功 - if (responseStr.contains("\"code\":200")) { - LogUtil.updateLog(logId, 2, responseStr); - } else { - LogUtil.updateLog(logId, 0, responseStr); + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { + final String responseStr = Objects.requireNonNull(response.body()).string(); + Log.d(TAG, "Response:" + response.code() + "," + responseStr); + Toast(handError, TAG, "发送状态:" + responseStr); + + //TODO:粗略解析是否发送成功 + if (responseStr.contains("\"code\":200")) { + LogUtil.updateLog(logId, 2, responseStr); + } else { + LogUtil.updateLog(logId, 0, responseStr); + } } - } + }); } diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderQyWxAppMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderQyWxAppMsg.java index 7f25237a..096439cd 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderQyWxAppMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderQyWxAppMsg.java @@ -3,6 +3,8 @@ package com.idormy.sms.forwarder.sender; import android.os.Handler; import android.util.Log; +import androidx.annotation.NonNull; + import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.idormy.sms.forwarder.model.SenderModel; @@ -16,6 +18,8 @@ import java.util.Map; import java.util.Objects; import java.util.concurrent.TimeUnit; +import okhttp3.Call; +import okhttp3.Callback; import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; @@ -66,47 +70,50 @@ public class SenderQyWxAppMsg extends SenderBaseMsg { .build(); final Request request = new Request.Builder().url(getTokenUrl).get().build(); - try (Response response = client.newCall(request).execute()) { - //异常处理 - if (!response.isSuccessful()) { - String resp = "Unexpected code " + response; - Log.d(TAG, "onFailure:" + resp); - Toast(handError, TAG, "获取access_token失败:" + resp); - - LogUtil.updateLog(logId, 0, resp); + + client.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(@NonNull Call call, @NonNull final IOException e) { + LogUtil.updateLog(logId, 0, e.getMessage()); qYWXAppSettingVo.setAccessToken(""); qYWXAppSettingVo.setExpiresIn(0L); if (senderModel != null) { senderModel.setJsonSetting(JSON.toJSONString(qYWXAppSettingVo)); SenderUtil.updateSender(senderModel); } + Log.d(TAG, "onFailure:" + e.getMessage()); + Toast(handError, TAG, "获取access_token失败:" + e.getMessage()); } - final String json = Objects.requireNonNull(response.body()).string(); - Log.d(TAG, "Code:" + response.code() + " Response: " + json); - JSONObject jsonObject = JSON.parseObject(json); - int errcode = jsonObject.getInteger("errcode"); - if (errcode == 0) { - String access_token = jsonObject.getString("access_token"); - long expires_in = System.currentTimeMillis() + (jsonObject.getInteger("expires_in") - 120) * 1000L; //提前2分钟过期 - Log.d(TAG, "access_token:" + access_token); - Log.d(TAG, "expires_in:" + expires_in); - - qYWXAppSettingVo.setAccessToken(access_token); - qYWXAppSettingVo.setExpiresIn(expires_in); - if (senderModel != null) { - senderModel.setJsonSetting(JSON.toJSONString(qYWXAppSettingVo)); - SenderUtil.updateSender(senderModel); + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { + final String json = Objects.requireNonNull(response.body()).string(); + Log.d(TAG, "Code:" + response.code() + " Response: " + json); + JSONObject jsonObject = JSON.parseObject(json); + int errcode = jsonObject.getInteger("errcode"); + if (errcode == 0) { + String access_token = jsonObject.getString("access_token"); + long expires_in = System.currentTimeMillis() + (jsonObject.getInteger("expires_in") - 120) * 1000L; //提前2分钟过期 + Log.d(TAG, "access_token:" + access_token); + Log.d(TAG, "expires_in:" + expires_in); + + qYWXAppSettingVo.setAccessToken(access_token); + qYWXAppSettingVo.setExpiresIn(expires_in); + if (senderModel != null) { + senderModel.setJsonSetting(JSON.toJSONString(qYWXAppSettingVo)); + SenderUtil.updateSender(senderModel); + } + + sendTextMsg(retryInterceptor, logId, handError, agentID, toUser, content, access_token); + } else { + String errmsg = jsonObject.getString("errmsg"); + LogUtil.updateLog(logId, 0, errmsg); + Log.d(TAG, "onFailure:" + errmsg); + Toast(handError, TAG, "获取access_token失败:" + errmsg); } - - sendTextMsg(retryInterceptor, logId, handError, agentID, toUser, content, access_token); - } else { - String errmsg = jsonObject.getString("errmsg"); - LogUtil.updateLog(logId, 0, errmsg); - Log.d(TAG, "onFailure:" + errmsg); - Toast(handError, TAG, "获取access_token失败:" + errmsg); } - } + + }); } else { sendTextMsg(retryInterceptor, logId, handError, agentID, toUser, content, accessToken); @@ -115,7 +122,7 @@ public class SenderQyWxAppMsg extends SenderBaseMsg { } //发送文本消息 - public static void sendTextMsg(RetryIntercepter retryInterceptor, final long logId, final Handler handError, String agentID, String toUser, String content, String accessToken) throws Exception { + public static void sendTextMsg(RetryIntercepter retryInterceptor, final long logId, final Handler handError, String agentID, String toUser, String content, String accessToken) { Map textMsgMap = new HashMap(); textMsgMap.put("touser", toUser); @@ -149,20 +156,28 @@ public class SenderQyWxAppMsg extends SenderBaseMsg { .post(requestBody) .build(); - try (Response response = client.newCall(request).execute()) { - if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); + client.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(@NonNull Call call, @NonNull final IOException e) { + LogUtil.updateLog(logId, 0, e.getMessage()); + Toast(handError, TAG, "发送失败:" + e.getMessage()); + } - final String responseStr = Objects.requireNonNull(response.body()).string(); - Log.d(TAG, "Response:" + response.code() + "," + responseStr); - Toast(handError, TAG, "发送状态:" + responseStr); + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { + final String responseStr = Objects.requireNonNull(response.body()).string(); + Log.d(TAG, "Response:" + response.code() + "," + responseStr); + Toast(handError, TAG, "发送状态:" + responseStr); - //TODO:粗略解析是否发送成功 - if (responseStr.contains("\"errcode\":0")) { - LogUtil.updateLog(logId, 2, responseStr); - } else { - LogUtil.updateLog(logId, 0, responseStr); + //TODO:粗略解析是否发送成功 + if (responseStr.contains("\"errcode\":0")) { + LogUtil.updateLog(logId, 2, responseStr); + } else { + LogUtil.updateLog(logId, 0, responseStr); + } } - } + }); + } diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderQyWxGroupRobotMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderQyWxGroupRobotMsg.java index 14552f57..258c505e 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderQyWxGroupRobotMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderQyWxGroupRobotMsg.java @@ -3,6 +3,8 @@ package com.idormy.sms.forwarder.sender; import android.os.Handler; import android.util.Log; +import androidx.annotation.NonNull; + import com.alibaba.fastjson.JSON; import com.idormy.sms.forwarder.utils.Define; import com.idormy.sms.forwarder.utils.LogUtil; @@ -13,6 +15,8 @@ import java.util.Map; import java.util.Objects; import java.util.concurrent.TimeUnit; +import okhttp3.Call; +import okhttp3.Callback; import okhttp3.MediaType; import okhttp3.OkHttpClient; import okhttp3.Request; @@ -59,20 +63,27 @@ public class SenderQyWxGroupRobotMsg extends SenderBaseMsg { .post(requestBody) .build(); - try (Response response = client.newCall(request).execute()) { - if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); - - final String responseStr = Objects.requireNonNull(response.body()).string(); - Log.d(TAG, "Response:" + response.code() + "," + responseStr); - Toast(handError, TAG, "发送状态:" + responseStr); + client.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(@NonNull Call call, @NonNull final IOException e) { + LogUtil.updateLog(logId, 0, e.getMessage()); + Toast(handError, TAG, "发送失败:" + e.getMessage()); + } - //TODO:粗略解析是否发送成功 - if (responseStr.contains("\"errcode\":0")) { - LogUtil.updateLog(logId, 2, responseStr); - } else { - LogUtil.updateLog(logId, 0, responseStr); + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { + final String responseStr = Objects.requireNonNull(response.body()).string(); + Log.d(TAG, "Response:" + response.code() + "," + responseStr); + Toast(handError, TAG, "发送状态:" + responseStr); + + //TODO:粗略解析是否发送成功 + if (responseStr.contains("\"errcode\":0")) { + LogUtil.updateLog(logId, 2, responseStr); + } else { + LogUtil.updateLog(logId, 0, responseStr); + } } - } + }); } diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderServerChanMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderServerChanMsg.java index be5ee66a..a8bae6b5 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderServerChanMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderServerChanMsg.java @@ -3,6 +3,8 @@ package com.idormy.sms.forwarder.sender; import android.os.Handler; import android.util.Log; +import androidx.annotation.NonNull; + import com.idormy.sms.forwarder.utils.Define; import com.idormy.sms.forwarder.utils.LogUtil; @@ -10,6 +12,8 @@ import java.io.IOException; import java.util.Objects; import java.util.concurrent.TimeUnit; +import okhttp3.Call; +import okhttp3.Callback; import okhttp3.MultipartBody; import okhttp3.OkHttpClient; import okhttp3.Request; @@ -50,20 +54,27 @@ public class SenderServerChanMsg extends SenderBaseMsg { RequestBody body = bodyBuilder.build(); Request request = new Request.Builder().url(requestUrl).method("POST", body).build(); - try (Response response = client.newCall(request).execute()) { - if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); - - final String responseStr = Objects.requireNonNull(response.body()).string(); - Log.d(TAG, "Response:" + response.code() + "," + responseStr); - Toast(handError, TAG, "发送状态:" + responseStr); + client.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(@NonNull Call call, @NonNull final IOException e) { + LogUtil.updateLog(logId, 0, e.getMessage()); + Toast(handError, TAG, "发送失败:" + e.getMessage()); + } - //TODO:粗略解析是否发送成功 - if (responseStr.contains("\"code\":0")) { - LogUtil.updateLog(logId, 2, responseStr); - } else { - LogUtil.updateLog(logId, 0, responseStr); + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { + final String responseStr = Objects.requireNonNull(response.body()).string(); + Log.d(TAG, "Response:" + response.code() + "," + responseStr); + Toast(handError, TAG, "发送状态:" + responseStr); + + //TODO:粗略解析是否发送成功 + if (responseStr.contains("\"code\":0")) { + LogUtil.updateLog(logId, 2, responseStr); + } else { + LogUtil.updateLog(logId, 0, responseStr); + } } - } + }); } diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderTelegramMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderTelegramMsg.java index 89800db9..1d524739 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderTelegramMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderTelegramMsg.java @@ -4,6 +4,8 @@ import android.os.Handler; import android.text.TextUtils; import android.util.Log; +import androidx.annotation.NonNull; + import com.alibaba.fastjson.JSON; import com.idormy.sms.forwarder.model.vo.TelegramSettingVo; import com.idormy.sms.forwarder.utils.Define; @@ -17,6 +19,8 @@ import java.util.Map; import java.util.Objects; import java.util.concurrent.TimeUnit; +import okhttp3.Call; +import okhttp3.Callback; import okhttp3.Credentials; import okhttp3.MediaType; import okhttp3.OkHttpClient; @@ -104,20 +108,27 @@ public class SenderTelegramMsg extends SenderBaseMsg { .build(); } - try (Response response = client.newCall(request).execute()) { - if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); - - final String responseStr = Objects.requireNonNull(response.body()).string(); - Log.d(TAG, "Response:" + response.code() + "," + responseStr); - Toast(handError, TAG, "发送状态:" + responseStr); + client.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(@NonNull Call call, @NonNull final IOException e) { + LogUtil.updateLog(logId, 0, e.getMessage()); + Toast(handError, TAG, "发送失败:" + e.getMessage()); + } - //TODO:粗略解析是否发送成功 - if (responseStr.contains("\"ok\":true")) { - LogUtil.updateLog(logId, 2, responseStr); - } else { - LogUtil.updateLog(logId, 0, responseStr); + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { + final String responseStr = Objects.requireNonNull(response.body()).string(); + Log.d(TAG, "Response:" + response.code() + "," + responseStr); + Toast(handError, TAG, "发送状态:" + responseStr); + + //TODO:粗略解析是否发送成功 + if (responseStr.contains("\"ok\":true")) { + LogUtil.updateLog(logId, 2, responseStr); + } else { + LogUtil.updateLog(logId, 0, responseStr); + } } - } + }); } diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderWebNotifyMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderWebNotifyMsg.java index dc2969c9..fa9d9dc7 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderWebNotifyMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderWebNotifyMsg.java @@ -4,6 +4,8 @@ import android.os.Handler; import android.util.Base64; import android.util.Log; +import androidx.annotation.NonNull; + import com.idormy.sms.forwarder.utils.CertUtils; import com.idormy.sms.forwarder.utils.Define; import com.idormy.sms.forwarder.utils.LogUtil; @@ -17,6 +19,8 @@ import java.util.concurrent.TimeUnit; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; +import okhttp3.Call; +import okhttp3.Callback; import okhttp3.MediaType; import okhttp3.MultipartBody; import okhttp3.OkHttpClient; @@ -101,20 +105,27 @@ public class SenderWebNotifyMsg extends SenderBaseMsg { .connectTimeout(Define.REQUEST_TIMEOUT_SECONDS, TimeUnit.SECONDS) .build(); - try (Response response = client.newCall(request).execute()) { - if (!response.isSuccessful()) throw new IOException("Unexpected code " + response); - - final String responseStr = Objects.requireNonNull(response.body()).string(); - Log.d(TAG, "Response:" + response.code() + "," + responseStr); - Toast(handError, TAG, "发送状态:" + responseStr); + client.newCall(request).enqueue(new Callback() { + @Override + public void onFailure(@NonNull Call call, @NonNull final IOException e) { + LogUtil.updateLog(logId, 0, e.getMessage()); + Toast(handError, TAG, "发送失败:" + e.getMessage()); + } - //返回http状态200即为成功 - if (response.isSuccessful()) { - LogUtil.updateLog(logId, 2, responseStr); - } else { - LogUtil.updateLog(logId, 0, responseStr); + @Override + public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException { + final String responseStr = Objects.requireNonNull(response.body()).string(); + Log.d(TAG, "Response:" + response.code() + "," + responseStr); + Toast(handError, TAG, "发送状态:" + responseStr); + + //返回http状态200即为成功 + if (200 == response.code()) { + LogUtil.updateLog(logId, 2, responseStr); + } else { + LogUtil.updateLog(logId, 0, responseStr); + } } - } + }); } diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SmsHubApiTask.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SmsHubApiTask.java index 1011fb51..1111a8db 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SmsHubApiTask.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SmsHubApiTask.java @@ -22,14 +22,13 @@ import java.util.TimerTask; * 2022/1/10 9:53 */ public class SmsHubApiTask extends TimerTask { - private static Boolean hasInit = false; public static final long DELAY_SECONDS = 30; private static final String TAG = "SmsHubApiTask"; + private static final SmsHubActionHandler.SmsHubMode smsHubMode = SmsHubActionHandler.SmsHubMode.client; + private static Boolean hasInit = false; private static Timer sendApiTimer; @SuppressLint("StaticFieldLeak") private static Context context; - private static final SmsHubActionHandler.SmsHubMode smsHubMode = SmsHubActionHandler.SmsHubMode.client; - @SuppressLint("HandlerLeak") public static void init(Context context) { @@ -43,35 +42,6 @@ public class SmsHubApiTask extends TimerTask { } } - @Override - public void run() { - try { - SmsHubVo smsHubVo = SmsHubVo.heartbeatInstance(); - List data = SmsHubActionHandler.getData(smsHubMode); - if (data != null && data.size() > 0) { - smsHubVo.setChildren(data); - } - smsHubVo.setChildren(data); - String url = SettingUtil.getSmsHubApiUrl(); - HttpUtil.asyncPostJson(TAG, url, smsHubVo, response -> { - //HttpUtil.Toast(TAG, "Response:" + response.code() + "," + responseStr); - if (response.code() == 200) { - String responseStr = Objects.requireNonNull(response.body()).string(); - List vos = JSON.parseArray(responseStr, SmsHubVo.class); - for (SmsHubVo vo : vos) { - SmsHubActionHandler.handle(TAG, vo); - } - SmsHubActionHandler.putData(smsHubMode, vos.toArray(new SmsHubVo[0])); - } - }, null); - } catch (Exception e) { - HttpUtil.Toast(TAG, "SmsHubApiTask 执行出错,请检查问题后重新开启" + e.getMessage()); - cancelTimer(); - SettingUtil.switchEnableSmsHubApi(false); - } - } - - public static void updateTimer() { cancelTimer(); if (SettingUtil.getSwitchEnableSmsHubApi()) { @@ -99,4 +69,32 @@ public class SmsHubApiTask extends TimerTask { sendApiTimer.schedule(new SmsHubApiTask(), 3000, seconds * 1000); } } + + @Override + public void run() { + try { + SmsHubVo smsHubVo = SmsHubVo.heartbeatInstance(); + List data = SmsHubActionHandler.getData(smsHubMode); + if (data != null && data.size() > 0) { + smsHubVo.setChildren(data); + } + smsHubVo.setChildren(data); + String url = SettingUtil.getSmsHubApiUrl(); + HttpUtil.asyncPostJson(TAG, url, smsHubVo, response -> { + //HttpUtil.Toast(TAG, "Response:" + response.code() + "," + responseStr); + if (response.code() == 200) { + String responseStr = Objects.requireNonNull(response.body()).string(); + List vos = JSON.parseArray(responseStr, SmsHubVo.class); + for (SmsHubVo vo : vos) { + SmsHubActionHandler.handle(TAG, vo); + } + SmsHubActionHandler.putData(smsHubMode, vos.toArray(new SmsHubVo[0])); + } + }, null); + } catch (Exception e) { + HttpUtil.Toast(TAG, "SmsHubApiTask 执行出错,请检查问题后重新开启" + e.getMessage()); + cancelTimer(); + SettingUtil.switchEnableSmsHubApi(false); + } + } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/LogUtil.java b/app/src/main/java/com/idormy/sms/forwarder/utils/LogUtil.java index 7119a61c..e8d8db40 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/LogUtil.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/LogUtil.java @@ -16,9 +16,12 @@ import com.idormy.sms.forwarder.model.SenderModel; import com.idormy.sms.forwarder.model.SenderTable; import com.idormy.sms.forwarder.model.vo.LogVo; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Arrays; +import java.util.Date; import java.util.List; +import java.util.Locale; @SuppressWarnings("UnusedReturnValue") public class LogUtil { @@ -90,6 +93,10 @@ public class LogUtil { if (id == null || id <= 0) return; if (forward_response == null) forward_response = ""; + Date date = new Date(); + SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.CHINESE); + forward_response = forward_response + "\nAt " + dateFormat.format(date); + @SuppressWarnings("StringBufferReplaceableByString") String sql = new StringBuilder().append("UPDATE ").append(LogTable.LogEntry.TABLE_NAME) .append(" SET ").append(LogTable.LogEntry.COLUMN_NAME_FORWARD_STATUS).append(" = ? , ") .append(LogTable.LogEntry.COLUMN_NAME_FORWARD_RESPONSE)