From 99718c0b5e308fd61b20321f56975facb6a1270d Mon Sep 17 00:00:00 2001 From: pppscn <35696959@qq.com> Date: Tue, 28 Sep 2021 13:30:44 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8E=A5=E5=8F=A3=E8=AF=B7=E6=B1=82=E5=A4=B1?= =?UTF-8?q?=E8=B4=A5=E5=90=8E=E5=BB=B6=E6=97=B6=E9=87=8D=E8=AF=955?= =?UTF-8?q?=E6=AC=A1=EF=BC=88=E5=8F=AF=E9=85=8D=E7=BD=AE=E9=97=B4=E9=9A=94?= =?UTF-8?q?=E6=97=B6=E9=97=B4=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 13 +- .../idormy/sms/forwarder/SettingActivity.java | 38 +++++- .../sms/forwarder/sender/SenderBarkMsg.java | 89 ++++++------- .../sms/forwarder/sender/SenderBaseMsg.java | 23 ++++ .../forwarder/sender/SenderDingdingMsg.java | 114 ++++++++--------- .../sms/forwarder/sender/SenderFeishuMsg.java | 115 ++++++++--------- .../sms/forwarder/sender/SenderMailMsg.java | 121 +++++++++--------- .../forwarder/sender/SenderQyWxAppMsg.java | 105 +++++++-------- .../sender/SenderQyWxGroupRobotMsg.java | 104 +++++++-------- .../forwarder/sender/SenderServerChanMsg.java | 106 +++++++-------- .../sms/forwarder/sender/SenderSmsMsg.java | 45 +++++-- .../forwarder/sender/SenderTelegramMsg.java | 106 +++++++-------- .../forwarder/sender/SenderWebNotifyMsg.java | 107 ++++++++-------- .../sms/forwarder/service/FrontService.java | 1 - .../idormy/sms/forwarder/utils/Define.java | 5 + .../sms/forwarder/utils/SettingUtil.java | 29 +++++ app/src/main/res/layout/activity_setting.xml | 95 +++++++++++++- .../layout/alert_dialog_setview_feishu.xml | 2 +- 18 files changed, 720 insertions(+), 498 deletions(-) create mode 100644 app/src/main/java/com/idormy/sms/forwarder/sender/SenderBaseMsg.java diff --git a/app/build.gradle b/app/build.gradle index c65a3e78..86161eac 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -75,10 +75,11 @@ dependencies { //其中动态代理抽象类回调需要使用ProxyBuilder类,故依赖一个库 //implementation 'com.linkedin.dexmaker:dexmaker-mockito:2.12.1' - //友盟基础组件库(所有友盟业务SDK都依赖基础组件库) - implementation 'com.umeng.umsdk:common:9.3.8' - implementation 'com.umeng.umsdk:asms:1.2.2' - implementation 'com.umeng.umsdk:abtest:1.0.0' + // 友盟统计SDK + implementation 'com.umeng.umsdk:common:9.4.4'// 必选 + implementation 'com.umeng.umsdk:asms:1.4.1'// 必选 + implementation 'com.umeng.umsdk:apm:1.4.2' // 错误分析升级为独立SDK,看crash数据请一定集成,可选 + implementation 'com.umeng.umsdk:abtest:1.0.0'//使用U-App中ABTest能力,可选 //XUpdate implementation 'com.github.xuexiangjys:XUpdate:2.1.0' @@ -93,4 +94,8 @@ dependencies { //Lombok compileOnly 'org.projectlombok:lombok:1.18.20' annotationProcessor 'org.projectlombok:lombok:1.18.20' + + //RxJava + implementation "io.reactivex.rxjava3:rxjava:3.1.1" + } diff --git a/app/src/main/java/com/idormy/sms/forwarder/SettingActivity.java b/app/src/main/java/com/idormy/sms/forwarder/SettingActivity.java index 883dc422..1a667bd0 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/SettingActivity.java +++ b/app/src/main/java/com/idormy/sms/forwarder/SettingActivity.java @@ -11,11 +11,11 @@ import android.widget.LinearLayout; import android.widget.Switch; import android.widget.Toast; +import androidx.appcompat.app.AppCompatActivity; + import com.idormy.sms.forwarder.utils.KeepAliveUtils; import com.idormy.sms.forwarder.utils.SettingUtil; -import androidx.appcompat.app.AppCompatActivity; - public class SettingActivity extends AppCompatActivity { private String TAG = "SettingActivity"; @@ -41,6 +41,17 @@ public class SettingActivity extends AppCompatActivity { EditText et_battery_level_alarm = (EditText) findViewById(R.id.et_battery_level_alarm); editBatteryLevelAlarm(et_battery_level_alarm); + EditText et_retry_delay_time1 = (EditText) findViewById(R.id.et_retry_delay_time1); + editRetryDelayTime(et_retry_delay_time1, 1); + EditText et_retry_delay_time2 = (EditText) findViewById(R.id.et_retry_delay_time2); + editRetryDelayTime(et_retry_delay_time2, 2); + EditText et_retry_delay_time3 = (EditText) findViewById(R.id.et_retry_delay_time3); + editRetryDelayTime(et_retry_delay_time3, 3); + EditText et_retry_delay_time4 = (EditText) findViewById(R.id.et_retry_delay_time4); + editRetryDelayTime(et_retry_delay_time4, 4); + EditText et_retry_delay_time5 = (EditText) findViewById(R.id.et_retry_delay_time5); + editRetryDelayTime(et_retry_delay_time5, 5); + Switch switch_sms_template = (Switch) findViewById(R.id.switch_sms_template); switchSmsTemplate(switch_sms_template); @@ -147,6 +158,27 @@ public class SettingActivity extends AppCompatActivity { }); } + + //接口请求失败重试 + private void editRetryDelayTime(final EditText et_retry_delay_time, final int index) { + et_retry_delay_time.setText(SettingUtil.getRetryDelayTime(index)); + + et_retry_delay_time.addTextChangedListener(new TextWatcher() { + @Override + public void beforeTextChanged(CharSequence s, int start, int count, int after) { + } + + @Override + public void onTextChanged(CharSequence s, int start, int before, int count) { + } + + @Override + public void afterTextChanged(Editable s) { + SettingUtil.setRetryDelayTime(index, Integer.parseInt(et_retry_delay_time.getText().toString())); + } + }); + } + //设置转发时启用自定义模版 private void switchSmsTemplate(Switch switch_sms_template) { boolean isOn = SettingUtil.getSwitchSmsTemplate(); @@ -250,7 +282,7 @@ public class SettingActivity extends AppCompatActivity { public void batterySetting(View view) { if (KeepAliveUtils.isIgnoreBatteryOptimization(this)) { - Toast.makeText(this,R.string.isIgnored,Toast.LENGTH_SHORT).show(); + Toast.makeText(this, R.string.isIgnored, Toast.LENGTH_SHORT).show(); } else { KeepAliveUtils.ignoreBatteryOptimization(this); } 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 8a0bc5ed..398cae38 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 @@ -1,26 +1,26 @@ package com.idormy.sms.forwarder.sender; -import android.os.Bundle; import android.os.Handler; -import android.os.Message; import android.util.Log; import com.idormy.sms.forwarder.utils.LogUtil; +import com.idormy.sms.forwarder.utils.SettingUtil; import java.io.IOException; import java.net.URLEncoder; +import java.util.concurrent.TimeUnit; import java.util.regex.Matcher; import java.util.regex.Pattern; +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.ObservableEmitter; import okhttp3.Call; import okhttp3.Callback; import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; -import static com.idormy.sms.forwarder.SenderActivity.NOTIFY; - -public class SenderBarkMsg { +public class SenderBarkMsg extends SenderBaseMsg { static String TAG = "SenderBarkMsg"; @@ -49,50 +49,53 @@ public class SenderBarkMsg { } } - OkHttpClient client = new OkHttpClient(); - final Request request = new Request.Builder().url(barkServer).get().build(); - Call call = client.newCall(request); - call.enqueue(new Callback() { - @Override - public void onFailure(Call call, final IOException e) { - LogUtil.updateLog(logId, 0, e.getMessage()); - Log.d(TAG, "onFailure:" + e.getMessage()); + final String requestUrl = barkServer; + Log.i(TAG, "requestUrl:" + requestUrl); - if (handError != null) { - Message msg = new Message(); - msg.what = NOTIFY; - Bundle bundle = new Bundle(); - bundle.putString("DATA", "发送失败:" + e.getMessage()); - msg.setData(bundle); - handError.sendMessage(msg); - } + Observable + .create((ObservableEmitter emitter) -> { + Toast(handError, TAG, "开始请求接口..."); - } + OkHttpClient client = new OkHttpClient(); + final Request request = new Request.Builder().url(requestUrl).get().build(); + Call call = client.newCall(request); + call.enqueue(new Callback() { + @Override + public void onFailure(Call call, final IOException e) { + LogUtil.updateLog(logId, 0, e.getMessage()); + Toast(handError, TAG, "发送失败:" + e.getMessage()); + emitter.onError(new RuntimeException("请求接口异常...")); + } - @Override - public void onResponse(Call call, Response response) throws IOException { - final String responseStr = response.body().string(); - Log.d(TAG, "Code:" + response.code() + responseStr); + @Override + public void onResponse(Call call, Response response) throws IOException { + final String responseStr = response.body().string(); + Log.d(TAG, "Response:" + response.code() + "," + responseStr); + Toast(handError, TAG, "发送状态:" + responseStr); - //TODO:粗略解析是否发送成功 - if (responseStr.contains("\"message\":\"success\"")) { - LogUtil.updateLog(logId, 1, responseStr); - } else { - LogUtil.updateLog(logId, 0, responseStr); - } + //TODO:粗略解析是否发送成功 + if (responseStr.contains("\"message\":\"success\"")) { + LogUtil.updateLog(logId, 1, responseStr); + } else { + LogUtil.updateLog(logId, 0, responseStr); + } + } + }); - if (handError != null) { - Message msg = new Message(); - msg.what = NOTIFY; - Bundle bundle = new Bundle(); - bundle.putString("DATA", "发送状态:" + responseStr); - msg.setData(bundle); - handError.sendMessage(msg); - Log.d(TAG, "Response:" + response.code() + responseStr); - } + }).retryWhen((Observable errorObservable) -> errorObservable + .zipWith(Observable.just( + SettingUtil.getRetryDelayTime(1), + SettingUtil.getRetryDelayTime(2), + SettingUtil.getRetryDelayTime(3), + SettingUtil.getRetryDelayTime(4), + SettingUtil.getRetryDelayTime(5) + ), (Throwable e, Integer time) -> time) + .flatMap((Integer delay) -> { + Toast(handError, TAG, "请求接口异常," + delay + "秒后重试"); + return Observable.timer(delay, TimeUnit.SECONDS); + })) + .subscribe(System.out::println); - } - }); } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderBaseMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderBaseMsg.java new file mode 100644 index 00000000..bbb1f32c --- /dev/null +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderBaseMsg.java @@ -0,0 +1,23 @@ +package com.idormy.sms.forwarder.sender; + +import static com.idormy.sms.forwarder.SenderActivity.NOTIFY; + +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.util.Log; + +public class SenderBaseMsg { + + public static void Toast(final Handler handError, final String Tag, String data) { + Log.i(Tag, data); + if (handError != null) { + Message msg = new Message(); + msg.what = NOTIFY; + Bundle bundle = new Bundle(); + bundle.putString("DATA", Tag + ":" + data); + msg.setData(bundle); + handError.sendMessage(msg); + } + } +} 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 5a6e268c..0dfa8fd4 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 @@ -1,6 +1,5 @@ package com.idormy.sms.forwarder.sender; -import android.os.Bundle; import android.os.Handler; import android.text.TextUtils; import android.util.Base64; @@ -8,6 +7,7 @@ import android.util.Log; import com.alibaba.fastjson.JSON; import com.idormy.sms.forwarder.utils.LogUtil; +import com.idormy.sms.forwarder.utils.SettingUtil; import java.io.IOException; import java.net.URLEncoder; @@ -15,10 +15,13 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.TimeUnit; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.ObservableEmitter; import okhttp3.Call; import okhttp3.Callback; import okhttp3.MediaType; @@ -27,20 +30,17 @@ import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; -import static com.idormy.sms.forwarder.SenderActivity.NOTIFY; - -public class SenderDingdingMsg { +public class SenderDingdingMsg extends SenderBaseMsg { static String TAG = "SenderDingdingMsg"; - public static void sendMsg(final long logId, final Handler handError, String token, String secret, String atMobiles, Boolean atAll, String msg) throws Exception { - Log.i(TAG, "sendMsg token:" + token + " secret:" + secret + " atMobiles:" + atMobiles + " atAll:" + atAll + " msg:" + msg); + public static void sendMsg(final long logId, final Handler handError, String token, String secret, String atMobiles, Boolean atAll, String content) throws Exception { + Log.i(TAG, "sendMsg token:" + token + " secret:" + secret + " atMobiles:" + atMobiles + " atAll:" + atAll + " content:" + content); if (token == null || token.isEmpty()) { return; } - token = "https://oapi.dingtalk.com/robot/send?access_token=" + token; if (secret != null && !secret.isEmpty()) { Long timestamp = System.currentTimeMillis(); String stringToSign = timestamp + "\n" + secret; @@ -49,13 +49,13 @@ public class SenderDingdingMsg { byte[] signData = mac.doFinal(stringToSign.getBytes("UTF-8")); String sign = URLEncoder.encode(new String(Base64.encode(signData, Base64.NO_WRAP)), "UTF-8"); token += "×tamp=" + timestamp + "&sign=" + sign; - Log.i(TAG, "webhook_token:" + token); + Log.i(TAG, "token:" + token); } Map textMsgMap = new HashMap(); textMsgMap.put("msgtype", "text"); Map textText = new HashMap(); - textText.put("content", msg); + textText.put("content", content); textMsgMap.put("text", textText); if (atMobiles != null || atAll != null) { Map AtMap = new HashMap(); @@ -83,60 +83,60 @@ public class SenderDingdingMsg { textMsgMap.put("at", AtMap); } - String textMsg = JSON.toJSONString(textMsgMap); - Log.i(TAG, "textMsg:" + textMsg); + final String requestUrl = "https://oapi.dingtalk.com/robot/send?access_token=" + token; + Log.i(TAG, "requestUrl:" + requestUrl); + final String requestMsg = JSON.toJSONString(textMsgMap); + Log.i(TAG, "requestMsg:" + requestMsg); - OkHttpClient client = new OkHttpClient(); - RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"), - textMsg); + Observable + .create((ObservableEmitter emitter) -> { + Toast(handError, TAG, "开始请求接口..."); - final Request request = new Request.Builder() - .url(token) - .addHeader("Content-Type", "application/json; charset=utf-8") - .post(requestBody) - .build(); - Call call = client.newCall(request); - call.enqueue(new Callback() { - @Override - public void onFailure(Call call, final IOException e) { - LogUtil.updateLog(logId, 0, e.getMessage()); - Log.d(TAG, "onFailure:" + e.getMessage()); + OkHttpClient client = new OkHttpClient(); + RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"), requestMsg); - if (handError != null) { - android.os.Message msg = new android.os.Message(); - msg.what = NOTIFY; - Bundle bundle = new Bundle(); - bundle.putString("DATA", "发送失败:" + e.getMessage()); - msg.setData(bundle); - handError.sendMessage(msg); - } + final Request request = new Request.Builder() + .url(requestUrl) + .addHeader("Content-Type", "application/json; charset=utf-8") + .post(requestBody) + .build(); + Call call = client.newCall(request); + call.enqueue(new Callback() { + @Override + public void onFailure(Call call, final IOException e) { + LogUtil.updateLog(logId, 0, e.getMessage()); + Toast(handError, TAG, "发送失败:" + e.getMessage()); + emitter.onError(new RuntimeException("请求接口异常...")); + } - } + @Override + public void onResponse(Call call, Response response) throws IOException { + final String responseStr = response.body().string(); + Log.d(TAG, "Response:" + response.code() + "," + responseStr); + Toast(handError, TAG, "发送状态:" + responseStr); - @Override - public void onResponse(Call call, Response response) throws IOException { - final String responseStr = response.body().string(); - Log.d(TAG, "Code:" + String.valueOf(response.code()) + responseStr); + //TODO:粗略解析是否发送成功 + if (responseStr.contains("\"errcode\":0")) { + LogUtil.updateLog(logId, 1, responseStr); + } else { + LogUtil.updateLog(logId, 0, responseStr); + } + } + }); - //TODO:粗略解析是否发送成功 - if (responseStr.contains("\"errcode\":0")) { - LogUtil.updateLog(logId, 1, responseStr); - } else { - LogUtil.updateLog(logId, 0, responseStr); - } - - if (handError != null) { - android.os.Message msg = new android.os.Message(); - msg.what = NOTIFY; - Bundle bundle = new Bundle(); - bundle.putString("DATA", "发送状态:" + responseStr); - msg.setData(bundle); - handError.sendMessage(msg); - Log.d(TAG, "Coxxyyde:" + String.valueOf(response.code()) + responseStr); - } - - } - }); + }).retryWhen((Observable errorObservable) -> errorObservable + .zipWith(Observable.just( + SettingUtil.getRetryDelayTime(1), + SettingUtil.getRetryDelayTime(2), + SettingUtil.getRetryDelayTime(3), + SettingUtil.getRetryDelayTime(4), + SettingUtil.getRetryDelayTime(5) + ), (Throwable e, Integer time) -> time) + .flatMap((Integer delay) -> { + Toast(handError, TAG, "请求接口异常," + delay + "秒后重试"); + return Observable.timer(delay, TimeUnit.SECONDS); + })) + .subscribe(System.out::println); } 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 703297e3..a9af1f40 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 @@ -1,23 +1,24 @@ package com.idormy.sms.forwarder.sender; -import static com.idormy.sms.forwarder.SenderActivity.NOTIFY; - -import android.os.Bundle; import android.os.Handler; import android.util.Base64; import android.util.Log; import com.alibaba.fastjson.JSON; import com.idormy.sms.forwarder.utils.LogUtil; +import com.idormy.sms.forwarder.utils.SettingUtil; import java.io.IOException; import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.TimeUnit; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.ObservableEmitter; import okhttp3.Call; import okhttp3.Callback; import okhttp3.MediaType; @@ -26,12 +27,12 @@ import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; -public class SenderFeishuMsg { +public class SenderFeishuMsg extends SenderBaseMsg { static String TAG = "SenderFeishuMsg"; - public static void sendMsg(final long logId, final Handler handError, String webhook, String secret, String msg) throws Exception { - Log.i(TAG, "sendMsg webhook:" + webhook + " secret:" + secret + " msg:" + msg); + public static void sendMsg(final long logId, final Handler handError, String webhook, String secret, String content) throws Exception { + Log.i(TAG, "sendMsg webhook:" + webhook + " secret:" + secret + " content:" + content); if (webhook == null || webhook.isEmpty()) { return; @@ -53,64 +54,64 @@ public class SenderFeishuMsg { //组装报文 textMsgMap.put("msg_type", "text"); - Map content = new HashMap(); - content.put("text", msg); - textMsgMap.put("content", content); + Map contentMap = new HashMap(); + contentMap.put("text", content); + textMsgMap.put("content", contentMap); - String textMsg = JSON.toJSONString(textMsgMap); - Log.i(TAG, "textMsg:" + textMsg); + final String requestUrl = webhook; + Log.i(TAG, "requestUrl:" + requestUrl); + final String requestMsg = JSON.toJSONString(textMsgMap); + Log.i(TAG, "requestMsg:" + requestMsg); - OkHttpClient client = new OkHttpClient(); - RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"), - textMsg); + Observable + .create((ObservableEmitter emitter) -> { + Toast(handError, TAG, "开始请求接口..."); - final Request request = new Request.Builder() - .url(webhook) - .addHeader("Content-Type", "application/json; charset=utf-8") - .post(requestBody) - .build(); - Call call = client.newCall(request); - call.enqueue(new Callback() { - @Override - public void onFailure(Call call, final IOException e) { - LogUtil.updateLog(logId, 0, e.getMessage()); - Log.d(TAG, "onFailure:" + e.getMessage()); + OkHttpClient client = new OkHttpClient(); + RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"), requestMsg); - if (handError != null) { - android.os.Message msg = new android.os.Message(); - msg.what = NOTIFY; - Bundle bundle = new Bundle(); - bundle.putString("DATA", "发送失败:" + e.getMessage()); - msg.setData(bundle); - handError.sendMessage(msg); - } + final Request request = new Request.Builder() + .url(requestUrl) + .addHeader("Content-Type", "application/json; charset=utf-8") + .post(requestBody) + .build(); + Call call = client.newCall(request); + call.enqueue(new Callback() { + @Override + public void onFailure(Call call, final IOException e) { + LogUtil.updateLog(logId, 0, e.getMessage()); + Toast(handError, TAG, "发送失败:" + e.getMessage()); + emitter.onError(new RuntimeException("请求接口异常...")); + } - } + @Override + public void onResponse(Call call, Response response) throws IOException { + final String responseStr = response.body().string(); + Log.d(TAG, "Response:" + response.code() + "," + responseStr); + Toast(handError, TAG, "发送状态:" + responseStr); - @Override - public void onResponse(Call call, Response response) throws IOException { - final String responseStr = response.body().string(); - Log.d(TAG, "Code:" + String.valueOf(response.code()) + responseStr); + //TODO:粗略解析是否发送成功 + if (responseStr.contains("\"StatusCode\":0")) { + LogUtil.updateLog(logId, 1, responseStr); + } else { + LogUtil.updateLog(logId, 0, responseStr); + } + } + }); - //TODO:粗略解析是否发送成功 - if (responseStr.contains("\"StatusCode\":0")) { - LogUtil.updateLog(logId, 1, responseStr); - } else { - LogUtil.updateLog(logId, 0, responseStr); - } - - if (handError != null) { - android.os.Message msg = new android.os.Message(); - msg.what = NOTIFY; - Bundle bundle = new Bundle(); - bundle.putString("DATA", "发送状态:" + responseStr); - msg.setData(bundle); - handError.sendMessage(msg); - Log.d(TAG, "respone:" + String.valueOf(response.code()) + responseStr); - } - - } - }); + }).retryWhen((Observable errorObservable) -> errorObservable + .zipWith(Observable.just( + SettingUtil.getRetryDelayTime(1), + SettingUtil.getRetryDelayTime(2), + SettingUtil.getRetryDelayTime(3), + SettingUtil.getRetryDelayTime(4), + SettingUtil.getRetryDelayTime(5) + ), (Throwable e, Integer time) -> time) + .flatMap((Integer delay) -> { + Toast(handError, TAG, "请求接口异常," + delay + "秒后重试"); + return Observable.timer(delay, TimeUnit.SECONDS); + })) + .subscribe(System.out::println); } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderMailMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderMailMsg.java index 425dbb05..fa37b2cf 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderMailMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderMailMsg.java @@ -1,88 +1,83 @@ package com.idormy.sms.forwarder.sender; -import android.os.Bundle; import android.os.Handler; import android.util.Log; import com.idormy.sms.forwarder.utils.LogUtil; +import com.idormy.sms.forwarder.utils.SettingUtil; import com.smailnet.emailkit.Draft; import com.smailnet.emailkit.EmailKit; -import static com.idormy.sms.forwarder.SenderActivity.NOTIFY; +import java.util.concurrent.TimeUnit; + +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.ObservableEmitter; -public class SenderMailMsg { +public class SenderMailMsg extends SenderBaseMsg { private static String TAG = "SenderMailMsg"; public static void sendEmail(final long logId, final Handler handError, final String host, final String port, final boolean ssl, final String fromemail, final String nickname, final String pwd, final String toAdd, final String title, final String content) { Log.d(TAG, "sendEmail: host:" + host + " port:" + port + " ssl:" + ssl + " fromemail:" + fromemail + " nickname:" + nickname + " pwd:" + pwd + " toAdd:" + toAdd); - try { - //初始化框架 - //EmailKit.initialize(this); + Observable + .create((ObservableEmitter emitter) -> { + Toast(handError, TAG, "开始请求接口..."); + try { + //初始化框架 + //EmailKit.initialize(this); - //配置发件人邮件服务器参数 - EmailKit.Config config = new EmailKit.Config() - .setSMTP(host, Integer.parseInt(port), ssl) //设置SMTP服务器主机地址、端口和是否开启ssl - .setAccount(fromemail) //发件人邮箱 - .setPassword(pwd); //密码或授权码 + //配置发件人邮件服务器参数 + EmailKit.Config config = new EmailKit.Config() + .setSMTP(host, Integer.parseInt(port), ssl) //设置SMTP服务器主机地址、端口和是否开启ssl + .setAccount(fromemail) //发件人邮箱 + .setPassword(pwd); //密码或授权码 - //设置一封草稿邮件 - Draft draft = new Draft() - .setNickname(nickname) //发件人昵称 - .setTo(toAdd) //收件人邮箱 - .setSubject(title) //邮件主题 - .setText(content); //邮件正文 + //设置一封草稿邮件 + Draft draft = new Draft() + .setNickname(nickname) //发件人昵称 + .setTo(toAdd) //收件人邮箱 + .setSubject(title) //邮件主题 + .setText(content); //邮件正文 - //使用SMTP服务发送邮件 - EmailKit.useSMTPService(config) - .send(draft, new EmailKit.GetSendCallback() { - @Override - public void onSuccess() { - LogUtil.updateLog(logId, 1, "发送成功"); - Log.i(TAG, "发送成功"); - if (handError != null) { - android.os.Message msg = new android.os.Message(); - msg.what = NOTIFY; - Bundle bundle = new Bundle(); - bundle.putString("DATA", "发送成功"); - msg.setData(bundle); - handError.sendMessage(msg); - } - } + //使用SMTP服务发送邮件 + EmailKit.useSMTPService(config) + .send(draft, new EmailKit.GetSendCallback() { + @Override + public void onSuccess() { + LogUtil.updateLog(logId, 1, "发送成功"); + Toast(handError, TAG, "发送成功"); + } - @Override - public void onFailure(String errMsg) { - LogUtil.updateLog(logId, 0, errMsg); - Log.i(TAG, "发送失败,错误:" + errMsg); - if (handError != null) { - android.os.Message msg = new android.os.Message(); - msg.what = NOTIFY; - Bundle bundle = new Bundle(); - bundle.putString("DATA", "发送失败,错误:" + errMsg); - msg.setData(bundle); - handError.sendMessage(msg); - } - } - }); + @Override + public void onFailure(String errMsg) { + LogUtil.updateLog(logId, 0, errMsg); + Toast(handError, TAG, "发送失败,错误:" + errMsg); + } + }); - //销毁框架 - EmailKit.destroy(); - - } catch (Exception e) { - LogUtil.updateLog(logId, 0, e.getMessage()); - Log.e(TAG, e.getMessage(), e); - if (handError != null) { - android.os.Message msg = new android.os.Message(); - msg.what = NOTIFY; - Bundle bundle = new Bundle(); - bundle.putString("DATA", e.getMessage()); - msg.setData(bundle); - handError.sendMessage(msg); - } - - } + //销毁框架 + EmailKit.destroy(); + } catch (Exception e) { + LogUtil.updateLog(logId, 0, e.getMessage()); + Log.e(TAG, e.getMessage(), e); + Toast(handError, TAG, "发送失败:" + e.getMessage()); + emitter.onError(new RuntimeException("请求接口异常...")); + } + }).retryWhen((Observable errorObservable) -> errorObservable + .zipWith(Observable.just( + SettingUtil.getRetryDelayTime(1), + SettingUtil.getRetryDelayTime(2), + SettingUtil.getRetryDelayTime(3), + SettingUtil.getRetryDelayTime(4), + SettingUtil.getRetryDelayTime(5) + ), (Throwable e, Integer time) -> time) + .flatMap((Integer delay) -> { + Toast(handError, TAG, "请求接口异常," + delay + "秒后重试"); + return Observable.timer(delay, TimeUnit.SECONDS); + })) + .subscribe(System.out::println); } } \ No newline at end of file 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 607c2f41..32dbb3e3 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 @@ -1,5 +1,7 @@ package com.idormy.sms.forwarder.sender; +import static com.idormy.sms.forwarder.SenderActivity.NOTIFY; + import android.os.Bundle; import android.os.Handler; import android.os.Message; @@ -9,11 +11,15 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.idormy.sms.forwarder.MyApplication; import com.idormy.sms.forwarder.utils.LogUtil; +import com.idormy.sms.forwarder.utils.SettingUtil; import java.io.IOException; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.TimeUnit; +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.ObservableEmitter; import okhttp3.Call; import okhttp3.Callback; import okhttp3.MediaType; @@ -22,9 +28,7 @@ import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; -import static com.idormy.sms.forwarder.SenderActivity.NOTIFY; - -public class SenderQyWxAppMsg { +public class SenderQyWxAppMsg extends SenderBaseMsg { static String TAG = "SenderQyWxAppMsg"; @@ -99,8 +103,6 @@ public class SenderQyWxAppMsg { //发送文本消息 public static void sendTextMsg(final long logId, final Handler handError, String agentID, String toUser, String content) { - String sendUrl = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + MyApplication.QyWxAccessToken; - Log.d(TAG, "sendUrl:" + sendUrl); Map textMsgMap = new HashMap(); textMsgMap.put("touser", toUser); @@ -111,57 +113,60 @@ public class SenderQyWxAppMsg { textText.put("content", content); textMsgMap.put("text", textText); - String textMsg = JSON.toJSONString(textMsgMap); - Log.d(TAG, "textMsg:" + textMsg); + final String requestUrl = "https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=" + MyApplication.QyWxAccessToken; + Log.i(TAG, "requestUrl:" + requestUrl); + final String requestMsg = JSON.toJSONString(textMsgMap); + Log.i(TAG, "requestMsg:" + requestMsg); - OkHttpClient client = new OkHttpClient(); - RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"), textMsg); + Observable + .create((ObservableEmitter emitter) -> { + Toast(handError, TAG, "开始请求接口..."); - final Request request = new Request.Builder() - .url(sendUrl) - .addHeader("Content-Type", "application/json; charset=utf-8") - .post(requestBody) - .build(); - Call call = client.newCall(request); - call.enqueue(new Callback() { - @Override - public void onFailure(Call call, final IOException e) { - LogUtil.updateLog(logId, 0, e.getMessage()); - Log.d(TAG, "onFailure:" + e.getMessage()); - if (handError != null) { - android.os.Message msg = new android.os.Message(); - msg.what = NOTIFY; - Bundle bundle = new Bundle(); - bundle.putString("DATA", "发送失败:" + e.getMessage()); - msg.setData(bundle); - handError.sendMessage(msg); - } - } + OkHttpClient client = new OkHttpClient(); + RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"), requestMsg); - @Override - public void onResponse(Call call, Response response) throws IOException { - final String responseStr = response.body().string(); - Log.d(TAG, "Code:" + String.valueOf(response.code()) + " Response: " + responseStr); + final Request request = new Request.Builder() + .url(requestUrl) + .addHeader("Content-Type", "application/json; charset=utf-8") + .post(requestBody) + .build(); + Call call = client.newCall(request); + call.enqueue(new Callback() { + @Override + public void onFailure(Call call, final IOException e) { + LogUtil.updateLog(logId, 0, e.getMessage()); + Toast(handError, TAG, "发送失败:" + e.getMessage()); + emitter.onError(new RuntimeException("请求接口异常...")); + } - //TODO:粗略解析是否发送成功 - if (responseStr.contains("\"errcode\":0")) { - LogUtil.updateLog(logId, 1, responseStr); - } else { - LogUtil.updateLog(logId, 0, responseStr); - } + @Override + public void onResponse(Call call, Response response) throws IOException { + final String responseStr = response.body().string(); + Log.d(TAG, "Response:" + response.code() + "," + responseStr); + Toast(handError, TAG, "发送状态:" + responseStr); - if (handError != null) { - android.os.Message msg = new android.os.Message(); - msg.what = NOTIFY; - Bundle bundle = new Bundle(); - bundle.putString("DATA", "发送状态:" + responseStr); - msg.setData(bundle); - handError.sendMessage(msg); - Log.d(TAG, "Code:" + String.valueOf(response.code()) + " Response: " + responseStr); - } + //TODO:粗略解析是否发送成功 + if (responseStr.contains("\"errcode\":0")) { + LogUtil.updateLog(logId, 1, responseStr); + } else { + LogUtil.updateLog(logId, 0, responseStr); + } + } + }); - } - }); + }).retryWhen((Observable errorObservable) -> errorObservable + .zipWith(Observable.just( + SettingUtil.getRetryDelayTime(1), + SettingUtil.getRetryDelayTime(2), + SettingUtil.getRetryDelayTime(3), + SettingUtil.getRetryDelayTime(4), + SettingUtil.getRetryDelayTime(5) + ), (Throwable e, Integer time) -> time) + .flatMap((Integer delay) -> { + Toast(handError, TAG, "请求接口异常," + delay + "秒后重试"); + return Observable.timer(delay, TimeUnit.SECONDS); + })) + .subscribe(System.out::println); } } \ No newline at end of file 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 d7901db8..3ad1497b 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 @@ -1,16 +1,19 @@ package com.idormy.sms.forwarder.sender; -import android.os.Bundle; import android.os.Handler; import android.util.Log; import com.alibaba.fastjson.JSON; import com.idormy.sms.forwarder.utils.LogUtil; +import com.idormy.sms.forwarder.utils.SettingUtil; import java.io.IOException; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.TimeUnit; +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.ObservableEmitter; import okhttp3.Call; import okhttp3.Callback; import okhttp3.MediaType; @@ -19,9 +22,7 @@ import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; -import static com.idormy.sms.forwarder.SenderActivity.NOTIFY; - -public class SenderQyWxGroupRobotMsg { +public class SenderQyWxGroupRobotMsg extends SenderBaseMsg { static String TAG = "SenderQyWxGroupRobotMsg"; @@ -32,63 +33,66 @@ public class SenderQyWxGroupRobotMsg { return; } - //String textMsg = "{ \"msgtype\": \"text\", \"text\": {\"content\": \"" + from + " : " + content + "\"}}"; Map textMsgMap = new HashMap(); textMsgMap.put("msgtype", "text"); Map textText = new HashMap(); textText.put("content", content); textMsgMap.put("text", textText); - String textMsg = JSON.toJSONString(textMsgMap); - Log.i(TAG, "textMsg:" + textMsg); - OkHttpClient client = new OkHttpClient(); - RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"), textMsg); + final String requestUrl = webHook; + Log.i(TAG, "requestUrl:" + requestUrl); + final String requestMsg = JSON.toJSONString(textMsgMap); + Log.i(TAG, "requestMsg:" + requestMsg); - final Request request = new Request.Builder() - .url(webHook) - .addHeader("Content-Type", "application/json; charset=utf-8") - .post(requestBody) - .build(); - Call call = client.newCall(request); - call.enqueue(new Callback() { - @Override - public void onFailure(Call call, final IOException e) { - LogUtil.updateLog(logId, 0, e.getMessage()); - Log.d(TAG, "onFailure:" + e.getMessage()); + Observable + .create((ObservableEmitter emitter) -> { + Toast(handError, TAG, "开始请求接口..."); - if (handError != null) { - android.os.Message msg = new android.os.Message(); - msg.what = NOTIFY; - Bundle bundle = new Bundle(); - bundle.putString("DATA", "发送失败:" + e.getMessage()); - msg.setData(bundle); - handError.sendMessage(msg); - } - } + OkHttpClient client = new OkHttpClient(); + RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"), requestMsg); - @Override - public void onResponse(Call call, Response response) throws IOException { - final String responseStr = response.body().string(); - Log.d(TAG, "Code:" + String.valueOf(response.code()) + responseStr); + final Request request = new Request.Builder() + .url(requestUrl) + .addHeader("Content-Type", "application/json; charset=utf-8") + .post(requestBody) + .build(); + Call call = client.newCall(request); + call.enqueue(new Callback() { + @Override + public void onFailure(Call call, final IOException e) { + LogUtil.updateLog(logId, 0, e.getMessage()); + Toast(handError, TAG, "发送失败:" + e.getMessage()); + emitter.onError(new RuntimeException("请求接口异常...")); + } - //TODO:粗略解析是否发送成功 - if (responseStr.contains("\"errcode\":0")) { - LogUtil.updateLog(logId, 1, responseStr); - } else { - LogUtil.updateLog(logId, 0, responseStr); - } + @Override + public void onResponse(Call call, Response response) throws IOException { + final String responseStr = response.body().string(); + Log.d(TAG, "Response:" + response.code() + "," + responseStr); + Toast(handError, TAG, "发送状态:" + responseStr); - if (handError != null) { - android.os.Message msg = new android.os.Message(); - msg.what = NOTIFY; - Bundle bundle = new Bundle(); - bundle.putString("DATA", "发送状态:" + responseStr); - msg.setData(bundle); - handError.sendMessage(msg); - Log.d(TAG, "Coxxyyde:" + String.valueOf(response.code()) + responseStr); - } - } - }); + //TODO:粗略解析是否发送成功 + if (responseStr.contains("\"errcode\":0")) { + LogUtil.updateLog(logId, 1, responseStr); + } else { + LogUtil.updateLog(logId, 0, responseStr); + } + } + }); + + }).retryWhen((Observable errorObservable) -> errorObservable + .zipWith(Observable.just( + SettingUtil.getRetryDelayTime(1), + SettingUtil.getRetryDelayTime(2), + SettingUtil.getRetryDelayTime(3), + SettingUtil.getRetryDelayTime(4), + SettingUtil.getRetryDelayTime(5) + ), (Throwable e, Integer time) -> time) + .flatMap((Integer delay) -> { + Toast(handError, TAG, "请求接口异常," + delay + "秒后重试"); + return Observable.timer(delay, TimeUnit.SECONDS); + })) + .subscribe(System.out::println); } } 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 8058530c..b5bf277a 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 @@ -1,14 +1,16 @@ package com.idormy.sms.forwarder.sender; -import android.os.Bundle; import android.os.Handler; -import android.os.Message; import android.util.Log; import com.idormy.sms.forwarder.utils.LogUtil; +import com.idormy.sms.forwarder.utils.SettingUtil; import java.io.IOException; +import java.util.concurrent.TimeUnit; +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.ObservableEmitter; import okhttp3.Call; import okhttp3.Callback; import okhttp3.MultipartBody; @@ -17,73 +19,71 @@ import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; -import static com.idormy.sms.forwarder.SenderActivity.NOTIFY; - -public class SenderServerChanMsg { +public class SenderServerChanMsg extends SenderBaseMsg { static String TAG = "SenderServerChanMsg"; - public static void sendMsg(final long logId, final Handler handError, String sendKey, String title, String desp) throws Exception { + public static void sendMsg(final long logId, final Handler handError, final String sendKey, final String title, final String desp) throws Exception { Log.i(TAG, "sendMsg sendKey:" + sendKey + " title:" + title + " desp:" + desp); if (sendKey == null || sendKey.isEmpty()) { return; } + final String requestUrl = "https://sctapi.ftqq.com/" + sendKey + ".send"; + Log.i(TAG, "requestUrl:" + requestUrl); //特殊处理避免标题重复 - desp = desp.replaceFirst("^" + title + "(.*)", "").trim(); + final String requestMsg = desp.replaceFirst("^" + title + "(.*)", "").trim(); + Log.i(TAG, "requestMsg:" + requestMsg); - String sendUrl = "https://sctapi.ftqq.com/" + sendKey + ".send"; + Observable + .create((ObservableEmitter emitter) -> { + Toast(handError, TAG, "开始请求接口..."); - OkHttpClient client = new OkHttpClient().newBuilder().build(); - MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM) - .addFormDataPart("title", title) - .addFormDataPart("desp", desp); + OkHttpClient client = new OkHttpClient().newBuilder().build(); + MultipartBody.Builder builder = new MultipartBody.Builder().setType(MultipartBody.FORM) + .addFormDataPart("title", title) + .addFormDataPart("desp", requestMsg); - RequestBody body = builder.build(); - Request request = new Request.Builder().url(sendUrl).method("POST", body).build(); - Call call = client.newCall(request); - call.enqueue(new Callback() { - @Override - public void onFailure(Call call, final IOException e) { - LogUtil.updateLog(logId, 0, e.getMessage()); - Log.d(TAG, "onFailure:" + e.getMessage()); + RequestBody body = builder.build(); + Request request = new Request.Builder().url(requestUrl).method("POST", body).build(); + Call call = client.newCall(request); + call.enqueue(new Callback() { + @Override + public void onFailure(Call call, final IOException e) { + LogUtil.updateLog(logId, 0, e.getMessage()); + Toast(handError, TAG, "发送失败:" + e.getMessage()); + emitter.onError(new RuntimeException("请求接口异常...")); + } - if (handError != null) { - Message msg = new Message(); - msg.what = NOTIFY; - Bundle bundle = new Bundle(); - bundle.putString("DATA", "发送失败:" + e.getMessage()); - msg.setData(bundle); - handError.sendMessage(msg); - } + @Override + public void onResponse(Call call, Response response) throws IOException { + final String responseStr = response.body().string(); + Log.d(TAG, "Response:" + response.code() + "," + responseStr); + Toast(handError, TAG, "发送状态:" + responseStr); - } + //TODO:粗略解析是否发送成功 + if (responseStr.contains("\"code\":0")) { + LogUtil.updateLog(logId, 1, responseStr); + } else { + LogUtil.updateLog(logId, 0, responseStr); + } + } + }); - @Override - public void onResponse(Call call, Response response) throws IOException { - final String responseStr = response.body().string(); - Log.d(TAG, "Code:" + response.code() + responseStr); - - //TODO:粗略解析是否发送成功 - if (responseStr.contains("\"code\":0")) { - LogUtil.updateLog(logId, 1, responseStr); - } else { - LogUtil.updateLog(logId, 0, responseStr); - } - - if (handError != null) { - Message msg = new Message(); - msg.what = NOTIFY; - Bundle bundle = new Bundle(); - bundle.putString("DATA", "发送状态:" + responseStr); - msg.setData(bundle); - handError.sendMessage(msg); - Log.d(TAG, "Response:" + response.code() + responseStr); - } - - } - }); + }).retryWhen((Observable errorObservable) -> errorObservable + .zipWith(Observable.just( + SettingUtil.getRetryDelayTime(1), + SettingUtil.getRetryDelayTime(2), + SettingUtil.getRetryDelayTime(3), + SettingUtil.getRetryDelayTime(4), + SettingUtil.getRetryDelayTime(5) + ), (Throwable e, Integer time) -> time) + .flatMap((Integer delay) -> { + Toast(handError, TAG, "请求接口异常," + delay + "秒后重试"); + return Observable.timer(delay, TimeUnit.SECONDS); + })) + .subscribe(System.out::println); } } diff --git a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderSmsMsg.java b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderSmsMsg.java index 0acc15e4..ce3739c5 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/sender/SenderSmsMsg.java +++ b/app/src/main/java/com/idormy/sms/forwarder/sender/SenderSmsMsg.java @@ -4,10 +4,16 @@ import android.os.Handler; import android.util.Log; import com.idormy.sms.forwarder.utils.LogUtil; +import com.idormy.sms.forwarder.utils.SettingUtil; import com.idormy.sms.forwarder.utils.SimUtil; import com.idormy.sms.forwarder.utils.SmsUtil; -public class SenderSmsMsg { +import java.util.concurrent.TimeUnit; + +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.ObservableEmitter; + +public class SenderSmsMsg extends SenderBaseMsg { static String TAG = "SenderSmsMsg"; @@ -15,15 +21,36 @@ public class SenderSmsMsg { Log.i(TAG, "sendMsg simSlot:" + simSlot + " mobiles:" + mobiles + " onlyNoNetwork:" + onlyNoNetwork + " from:" + from + " text:" + text); //TODO:simSlot转subId - int subId = SimUtil.getSubscriptionIdBySimId(simSlot); - String res = SmsUtil.sendSms(subId, mobiles, text); + final int subId = SimUtil.getSubscriptionIdBySimId(simSlot); - //TODO:粗略解析是否发送成功 - if (res == null) { - LogUtil.updateLog(logId, 1, "发送成功"); - } else { - LogUtil.updateLog(logId, 0, res); - } + Observable + .create((ObservableEmitter emitter) -> { + Toast(handError, TAG, "开始发送短信..."); + + String res = SmsUtil.sendSms(subId, mobiles, text); + + //TODO:粗略解析是否发送成功 + if (res == null) { + LogUtil.updateLog(logId, 1, "发送成功"); + } else { + LogUtil.updateLog(logId, 0, res); + Toast(handError, TAG, "短信发送失败"); + emitter.onError(new RuntimeException("短信发送异常...")); + } + + }).retryWhen((Observable errorObservable) -> errorObservable + .zipWith(Observable.just( + SettingUtil.getRetryDelayTime(1), + SettingUtil.getRetryDelayTime(2), + SettingUtil.getRetryDelayTime(3), + SettingUtil.getRetryDelayTime(4), + SettingUtil.getRetryDelayTime(5) + ), (Throwable e, Integer time) -> time) + .flatMap((Integer delay) -> { + Toast(handError, TAG, "短信发送异常," + delay + "秒后重试"); + return Observable.timer(delay, TimeUnit.SECONDS); + })) + .subscribe(System.out::println); } } 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 b359f803..5d0848b8 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 @@ -1,17 +1,19 @@ package com.idormy.sms.forwarder.sender; -import android.os.Bundle; import android.os.Handler; -import android.os.Message; import android.util.Log; import com.alibaba.fastjson.JSON; import com.idormy.sms.forwarder.utils.LogUtil; +import com.idormy.sms.forwarder.utils.SettingUtil; import java.io.IOException; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.TimeUnit; +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.ObservableEmitter; import okhttp3.Call; import okhttp3.Callback; import okhttp3.MediaType; @@ -20,9 +22,7 @@ import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; -import static com.idormy.sms.forwarder.SenderActivity.NOTIFY; - -public class SenderTelegramMsg { +public class SenderTelegramMsg extends SenderBaseMsg { static String TAG = "SenderTelegramMsg"; @@ -36,66 +36,66 @@ public class SenderTelegramMsg { //特殊处理避免标题重复 text = text.replaceFirst("^" + from + "(.*)", "").replaceAll("#", "井").trim(); - String sendUrl = "https://api.telegram.org/bot" + apiToken + "/sendMessage"; - Log.d(TAG, "sendUrl:" + sendUrl); + final String requestUrl = "https://api.telegram.org/bot" + apiToken + "/sendMessage"; + Log.i(TAG, "requestUrl:" + requestUrl); Map bodyMap = new HashMap(); bodyMap.put("chat_id", chatId); bodyMap.put("text", text); bodyMap.put("parse_mode", "HTML"); - String bodyMsg = JSON.toJSONString(bodyMap); - Log.d(TAG, "body:" + bodyMsg); - OkHttpClient client = new OkHttpClient(); - RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"), bodyMsg); + final String requestMsg = JSON.toJSONString(bodyMap); + Log.i(TAG, "requestMsg:" + requestMsg); - final Request request = new Request.Builder() - .url(sendUrl) - .addHeader("Content-Type", "application/json; charset=utf-8") - .post(requestBody) - .build(); - Call call = client.newCall(request); - call.enqueue(new Callback() { - @Override - public void onFailure(Call call, final IOException e) { - LogUtil.updateLog(logId, 0, e.getMessage()); - Log.d(TAG, "onFailure:" + e.getMessage()); + Observable + .create((ObservableEmitter emitter) -> { + Toast(handError, TAG, "开始请求接口..."); - if (handError != null) { - Message msg = new Message(); - msg.what = NOTIFY; - Bundle bundle = new Bundle(); - bundle.putString("DATA", "发送失败:" + e.getMessage()); - msg.setData(bundle); - handError.sendMessage(msg); - } + OkHttpClient client = new OkHttpClient(); + RequestBody requestBody = RequestBody.create(MediaType.parse("application/json;charset=utf-8"), requestMsg); - } + final Request request = new Request.Builder() + .url(requestUrl) + .addHeader("Content-Type", "application/json; charset=utf-8") + .post(requestBody) + .build(); + Call call = client.newCall(request); + call.enqueue(new Callback() { + @Override + public void onFailure(Call call, final IOException e) { + LogUtil.updateLog(logId, 0, e.getMessage()); + Toast(handError, TAG, "发送失败:" + e.getMessage()); + emitter.onError(new RuntimeException("请求接口异常...")); + } - @Override - public void onResponse(Call call, Response response) throws IOException { - final String responseStr = response.body().string(); - Log.d(TAG, "Code:" + response.code() + responseStr); + @Override + public void onResponse(Call call, Response response) throws IOException { + final String responseStr = response.body().string(); + Log.d(TAG, "Response:" + response.code() + "," + responseStr); + Toast(handError, TAG, "发送状态:" + responseStr); - //TODO:粗略解析是否发送成功 - if (responseStr.contains("\"ok\":true")) { - LogUtil.updateLog(logId, 1, responseStr); - } else { - LogUtil.updateLog(logId, 0, responseStr); - } + //TODO:粗略解析是否发送成功 + if (responseStr.contains("\"ok\":true")) { + LogUtil.updateLog(logId, 1, responseStr); + } else { + LogUtil.updateLog(logId, 0, responseStr); + } + } + }); - if (handError != null) { - Message msg = new Message(); - msg.what = NOTIFY; - Bundle bundle = new Bundle(); - bundle.putString("DATA", "发送状态:" + responseStr); - msg.setData(bundle); - handError.sendMessage(msg); - Log.d(TAG, "Response:" + response.code() + responseStr); - } - - } - }); + }).retryWhen((Observable errorObservable) -> errorObservable + .zipWith(Observable.just( + SettingUtil.getRetryDelayTime(1), + SettingUtil.getRetryDelayTime(2), + SettingUtil.getRetryDelayTime(3), + SettingUtil.getRetryDelayTime(4), + SettingUtil.getRetryDelayTime(5) + ), (Throwable e, Integer time) -> time) + .flatMap((Integer delay) -> { + Toast(handError, TAG, "请求接口异常," + delay + "秒后重试"); + return Observable.timer(delay, TimeUnit.SECONDS); + })) + .subscribe(System.out::println); } } 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 ffd63f8e..b66466fc 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 @@ -1,19 +1,22 @@ package com.idormy.sms.forwarder.sender; -import android.os.Bundle; import android.os.Handler; import android.util.Base64; import android.util.Log; import com.idormy.sms.forwarder.utils.CertUtils; import com.idormy.sms.forwarder.utils.LogUtil; +import com.idormy.sms.forwarder.utils.SettingUtil; import java.io.IOException; import java.net.URLEncoder; +import java.util.concurrent.TimeUnit; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; +import io.reactivex.rxjava3.core.Observable; +import io.reactivex.rxjava3.core.ObservableEmitter; import okhttp3.Call; import okhttp3.Callback; import okhttp3.MediaType; @@ -23,9 +26,7 @@ import okhttp3.Request; import okhttp3.RequestBody; import okhttp3.Response; -import static com.idormy.sms.forwarder.SenderActivity.NOTIFY; - -public class SenderWebNotifyMsg { +public class SenderWebNotifyMsg extends SenderBaseMsg { static String TAG = "SenderWebNotifyMsg"; @@ -58,17 +59,17 @@ public class SenderWebNotifyMsg { Log.d(TAG, "method = GET, Url = " + webServer); request = new Request.Builder().url(webServer).get().build(); - } else if (webParams != null && webParams.contains("[msg]")){ + } else if (webParams != null && webParams.contains("[msg]")) { String bodyMsg; String Content_Type = "application/x-www-form-urlencoded"; - if (webParams.startsWith("{")){ - bodyMsg = content.replace("\n","\\n"); - bodyMsg = webParams.replace("[msg]",bodyMsg); + if (webParams.startsWith("{")) { + bodyMsg = content.replace("\n", "\\n"); + bodyMsg = webParams.replace("[msg]", bodyMsg); Content_Type = "application/json;charset=utf-8"; - }else{ - bodyMsg = webParams.replace("[msg]",URLEncoder.encode(content, "UTF-8")); + } else { + bodyMsg = webParams.replace("[msg]", URLEncoder.encode(content, "UTF-8")); } - RequestBody body = RequestBody.create(MediaType.parse(Content_Type), bodyMsg); + RequestBody body = RequestBody.create(MediaType.parse(Content_Type), bodyMsg); request = new Request.Builder() .url(webServer) .addHeader("Content-Type", Content_Type) @@ -89,52 +90,52 @@ public class SenderWebNotifyMsg { request = new Request.Builder().url(webServer).method("POST", body).build(); } - OkHttpClient client = new OkHttpClient().newBuilder() - //忽略https证书 - .sslSocketFactory(CertUtils.getSSLSocketFactory(), CertUtils.getX509TrustManager()) - .hostnameVerifier(CertUtils.getHostnameVerifier()) - .build(); - Call call = client.newCall(request); - call.enqueue(new Callback() { - @Override - public void onFailure(Call call, final IOException e) { - LogUtil.updateLog(logId, 0, e.getMessage()); - Log.d(TAG, "onFailure:" + e.getMessage()); + Observable + .create((ObservableEmitter emitter) -> { + Toast(handError, TAG, "开始请求接口..."); - if (handError != null) { - android.os.Message msg = new android.os.Message(); - msg.what = NOTIFY; - Bundle bundle = new Bundle(); - bundle.putString("DATA", "发送失败:" + e.getMessage()); - msg.setData(bundle); - handError.sendMessage(msg); - } + OkHttpClient client = new OkHttpClient().newBuilder() + //忽略https证书 + .sslSocketFactory(CertUtils.getSSLSocketFactory(), CertUtils.getX509TrustManager()) + .hostnameVerifier(CertUtils.getHostnameVerifier()) + .build(); + Call call = client.newCall(request); + call.enqueue(new Callback() { + @Override + public void onFailure(Call call, final IOException e) { + LogUtil.updateLog(logId, 0, e.getMessage()); + Toast(handError, TAG, "发送失败:" + e.getMessage()); + emitter.onError(new RuntimeException("请求接口异常...")); + } - } + @Override + public void onResponse(Call call, Response response) throws IOException { + final String responseStr = response.body().string(); + Log.d(TAG, "Response:" + response.code() + "," + responseStr); + Toast(handError, TAG, "发送状态:" + responseStr); - @Override - public void onResponse(Call call, Response response) throws IOException { - final String responseStr = response.body().string(); - Log.d(TAG, "Code:" + response.code() + " Response:" + responseStr); + //返回http状态200即为成功 + if (200 == response.code()) { + LogUtil.updateLog(logId, 1, responseStr); + } else { + LogUtil.updateLog(logId, 0, responseStr); + } + } + }); - //返回http状态200即为成功 - if (200 == response.code()) { - LogUtil.updateLog(logId, 1, responseStr); - } else { - LogUtil.updateLog(logId, 0, responseStr); - } - - if (handError != null) { - android.os.Message msg = new android.os.Message(); - msg.what = NOTIFY; - Bundle bundle = new Bundle(); - bundle.putString("DATA", "发送状态:" + responseStr); - msg.setData(bundle); - handError.sendMessage(msg); - } - - } - }); + }).retryWhen((Observable errorObservable) -> errorObservable + .zipWith(Observable.just( + SettingUtil.getRetryDelayTime(1), + SettingUtil.getRetryDelayTime(2), + SettingUtil.getRetryDelayTime(3), + SettingUtil.getRetryDelayTime(4), + SettingUtil.getRetryDelayTime(5) + ), (Throwable e, Integer time) -> time) + .flatMap((Integer delay) -> { + Toast(handError, TAG, "请求接口异常," + delay + "秒后重试"); + return Observable.timer(delay, TimeUnit.SECONDS); + })) + .subscribe(System.out::println); } diff --git a/app/src/main/java/com/idormy/sms/forwarder/service/FrontService.java b/app/src/main/java/com/idormy/sms/forwarder/service/FrontService.java index 0106d453..146b87ba 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/service/FrontService.java +++ b/app/src/main/java/com/idormy/sms/forwarder/service/FrontService.java @@ -94,7 +94,6 @@ public class FrontService extends Service { int batteryLevel = getBatteryLevel(); System.out.println("当前剩余电量:" + batteryLevel + "%"); int batteryLevelAlarm = Integer.parseInt(SettingUtil.getBatteryLevelAlarm()); - System.out.println(alarmTimes[0]); if (alarmTimes[0] <= 1 && batteryLevelAlarm > 0 && batteryLevelAlarm <= 100 && batteryLevel == batteryLevelAlarm) { Date date = new Date(); String msg = "当前剩余电量:" + batteryLevel + "%,已经到达低电量预警阈值,请及时充电!"; diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/Define.java b/app/src/main/java/com/idormy/sms/forwarder/utils/Define.java index f23c0372..e04b3669 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/Define.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/Define.java @@ -11,6 +11,11 @@ public class Define { public static String SP_MSG_KEY_SWITCH_SMS_TEMPLATE = "tsms_msg_key_switch_sms_template"; public static String SP_MSG_KEY_STRING_SMS_TEMPLATE = "tsms_msg_key_string_sms_template"; public static String SP_MSG_KEY_STRING_BATTERY_LEVEL_ALARM = "tsms_msg_key_string_battery_level_alarm"; + public static String SP_MSG_KEY_STRING_RETRY_DELAY_TIME1 = "tsms_msg_key_string_retry_delay_time1"; + public static String SP_MSG_KEY_STRING_RETRY_DELAY_TIME2 = "tsms_msg_key_string_retry_delay_time2"; + public static String SP_MSG_KEY_STRING_RETRY_DELAY_TIME3 = "tsms_msg_key_string_retry_delay_time3"; + public static String SP_MSG_KEY_STRING_RETRY_DELAY_TIME4 = "tsms_msg_key_string_retry_delay_time4"; + public static String SP_MSG_KEY_STRING_RETRY_DELAY_TIME5 = "tsms_msg_key_string_retry_delay_time5"; public static String SP_MSG = "forwarder_msg"; public static String SP_MSG_SET_KEY = "forwarder_msg_set_key"; diff --git a/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtil.java b/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtil.java index 77da4fd1..7ce680f7 100644 --- a/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtil.java +++ b/app/src/main/java/com/idormy/sms/forwarder/utils/SettingUtil.java @@ -114,4 +114,33 @@ public class SettingUtil { public static boolean saveMsgHistory() { return sp_setting.getBoolean("option_save_history_on", false); } + + //接口请求失败重试 + private static String getRetryDelayTimeKey(int index) { + switch (index) { + case 1: + return Define.SP_MSG_KEY_STRING_RETRY_DELAY_TIME1; + case 2: + return Define.SP_MSG_KEY_STRING_RETRY_DELAY_TIME2; + case 3: + return Define.SP_MSG_KEY_STRING_RETRY_DELAY_TIME3; + case 4: + return Define.SP_MSG_KEY_STRING_RETRY_DELAY_TIME4; + case 5: + default: + return Define.SP_MSG_KEY_STRING_RETRY_DELAY_TIME5; + } + } + + public static int getRetryDelayTime(int index) { + String key = getRetryDelayTimeKey(index); + return sp_setting.getInt(key, (int) Math.pow(2, (index - 1))); + } + + public static void setRetryDelayTime(int index, int retry_delay_time) { + String key = getRetryDelayTimeKey(index); + Log.d(TAG, "retry_delay_time_" + index + " :" + retry_delay_time); + sp_setting.edit().putInt(key, retry_delay_time).apply(); + } + } diff --git a/app/src/main/res/layout/activity_setting.xml b/app/src/main/res/layout/activity_setting.xml index 2d469efb..1e360cdc 100644 --- a/app/src/main/res/layout/activity_setting.xml +++ b/app/src/main/res/layout/activity_setting.xml @@ -31,6 +31,7 @@ android:layout_marginLeft="5dp" android:ems="16" android:inputType="" + android:maxLines="1" android:text="" /> @@ -70,6 +71,7 @@ android:layout_marginLeft="5dp" android:ems="16" android:inputType="" + android:maxLines="1" android:text="" /> @@ -109,6 +111,7 @@ android:layout_marginLeft="5dp" android:ems="16" android:inputType="" + android:maxLines="1" android:text="" /> @@ -130,7 +133,7 @@ + + + + + + + + + + + + + + + + + + + + + + +