优化:请求重试机制(无网络时也执行重试机制 & 修正延迟时间单位错误)

This commit is contained in:
pppscn 2024-01-04 12:41:31 +08:00
parent 0f83526ece
commit 388d94a7cf
29 changed files with 299 additions and 204 deletions

View File

@ -44,6 +44,15 @@ interface LogsDao {
) )
fun updateStatus(id: Long, status: Int, response: String): Int fun updateStatus(id: Long, status: Int, response: String): Int
@Query(
"UPDATE Logs SET forward_response=CASE WHEN (trim(forward_response) = '' or trim(forward_response) = 'ok')" +
" THEN :response" +
" ELSE forward_response || '\n' || :response" +
" END" +
" where id=:id"
)
fun updateResponse(id: Long, response: String): Int
@Query("SELECT * FROM Logs where id=:id") @Query("SELECT * FROM Logs where id=:id")
fun get(id: Long): Single<Logs> fun get(id: Long): Single<Logs>

View File

@ -17,6 +17,9 @@ class LogsRepository(private val logsDao: LogsDao) {
@WorkerThread @WorkerThread
fun updateStatus(id: Long, status: Int, response: String): Int = logsDao.updateStatus(id, status, response) fun updateStatus(id: Long, status: Int, response: String): Int = logsDao.updateStatus(id, status, response)
@WorkerThread
fun updateResponse(id: Long, response: String): Int = logsDao.updateResponse(id, response)
fun getOne(id: Long) = logsDao.getOne(id) fun getOne(id: Long) = logsDao.getOne(id)
} }

View File

@ -25,7 +25,6 @@ import com.idormy.sms.forwarder.utils.SettingUtils
import com.idormy.sms.forwarder.utils.XToastUtils import com.idormy.sms.forwarder.utils.XToastUtils
import com.xuexiang.xaop.annotation.SingleClick import com.xuexiang.xaop.annotation.SingleClick
import com.xuexiang.xhttp2.XHttp import com.xuexiang.xhttp2.XHttp
import com.xuexiang.xhttp2.cache.model.CacheMode
import com.xuexiang.xhttp2.callback.SimpleCallBack import com.xuexiang.xhttp2.callback.SimpleCallBack
import com.xuexiang.xhttp2.exception.ApiException import com.xuexiang.xhttp2.exception.ApiException
import com.xuexiang.xpage.annotation.Page import com.xuexiang.xpage.annotation.Page
@ -56,67 +55,31 @@ class ClientFragment : BaseFragment<FragmentClientBinding?>(), View.OnClickListe
private var mCountDownHelper: CountDownButtonHelper? = null private var mCountDownHelper: CountDownButtonHelper? = null
private var CLIENT_FRAGMENT_LIST = listOf( private var CLIENT_FRAGMENT_LIST = listOf(
PageInfo( PageInfo(
getString(R.string.api_clone), getString(R.string.api_clone), "com.idormy.sms.forwarder.fragment.client.CloneFragment", "{\"\":\"\"}", CoreAnim.slide, R.drawable.icon_api_clone
"com.idormy.sms.forwarder.fragment.client.CloneFragment",
"{\"\":\"\"}",
CoreAnim.slide,
R.drawable.icon_api_clone
), ),
PageInfo( PageInfo(
getString(R.string.api_sms_query), getString(R.string.api_sms_query), "com.idormy.sms.forwarder.fragment.client.SmsQueryFragment", "{\"\":\"\"}", CoreAnim.slide, R.drawable.icon_api_sms_query
"com.idormy.sms.forwarder.fragment.client.SmsQueryFragment",
"{\"\":\"\"}",
CoreAnim.slide,
R.drawable.icon_api_sms_query
), ),
PageInfo( PageInfo(
getString(R.string.api_sms_send), getString(R.string.api_sms_send), "com.idormy.sms.forwarder.fragment.client.SmsSendFragment", "{\"\":\"\"}", CoreAnim.slide, R.drawable.icon_api_sms_send
"com.idormy.sms.forwarder.fragment.client.SmsSendFragment",
"{\"\":\"\"}",
CoreAnim.slide,
R.drawable.icon_api_sms_send
), ),
PageInfo( PageInfo(
getString(R.string.api_call_query), getString(R.string.api_call_query), "com.idormy.sms.forwarder.fragment.client.CallQueryFragment", "{\"\":\"\"}", CoreAnim.slide, R.drawable.icon_api_call_query
"com.idormy.sms.forwarder.fragment.client.CallQueryFragment",
"{\"\":\"\"}",
CoreAnim.slide,
R.drawable.icon_api_call_query
), ),
PageInfo( PageInfo(
getString(R.string.api_contact_query), getString(R.string.api_contact_query), "com.idormy.sms.forwarder.fragment.client.ContactQueryFragment", "{\"\":\"\"}", CoreAnim.slide, R.drawable.icon_api_contact_query
"com.idormy.sms.forwarder.fragment.client.ContactQueryFragment",
"{\"\":\"\"}",
CoreAnim.slide,
R.drawable.icon_api_contact_query
), ),
PageInfo( PageInfo(
getString(R.string.api_contact_add), getString(R.string.api_contact_add), "com.idormy.sms.forwarder.fragment.client.ContactAddFragment", "{\"\":\"\"}", CoreAnim.slide, R.drawable.icon_api_contact_add
"com.idormy.sms.forwarder.fragment.client.ContactAddFragment",
"{\"\":\"\"}",
CoreAnim.slide,
R.drawable.icon_api_contact_add
), ),
PageInfo( PageInfo(
getString(R.string.api_wol), getString(R.string.api_wol), "com.idormy.sms.forwarder.fragment.client.WolSendFragment", "{\"\":\"\"}", CoreAnim.slide, R.drawable.icon_api_wol
"com.idormy.sms.forwarder.fragment.client.WolSendFragment",
"{\"\":\"\"}",
CoreAnim.slide,
R.drawable.icon_api_wol
), ),
PageInfo( PageInfo(
getString(R.string.api_location), getString(R.string.api_location), "com.idormy.sms.forwarder.fragment.client.LocationFragment", "{\"\":\"\"}", CoreAnim.slide, R.drawable.icon_api_location
"com.idormy.sms.forwarder.fragment.client.LocationFragment",
"{\"\":\"\"}",
CoreAnim.slide,
R.drawable.icon_api_location
), ),
PageInfo( PageInfo(
getString(R.string.api_battery_query), getString(R.string.api_battery_query), "com.idormy.sms.forwarder.fragment.client.BatteryQueryFragment", "{\"\":\"\"}", CoreAnim.slide, R.drawable.icon_api_battery_query
"com.idormy.sms.forwarder.fragment.client.BatteryQueryFragment",
"{\"\":\"\"}",
CoreAnim.slide,
R.drawable.icon_api_battery_query
), ),
) )
@ -348,8 +311,7 @@ class ClientFragment : BaseFragment<FragmentClientBinding?>(), View.OnClickListe
XToastUtils.error(getString(R.string.disabled_on_the_server)) XToastUtils.error(getString(R.string.disabled_on_the_server))
return return
} }
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST") PageOption.to(Class.forName(item.classPath) as Class<XPageFragment>).setNewActivity(true).open(this)
PageOption.to(Class.forName(item.classPath) as Class<XPageFragment>).setNewActivity(true).open(this)
} catch (e: Exception) { } catch (e: Exception) {
e.printStackTrace() e.printStackTrace()
Log.e(TAG, "onItemClick error: ${e.message}") Log.e(TAG, "onItemClick error: ${e.message}")
@ -380,8 +342,7 @@ class ClientFragment : BaseFragment<FragmentClientBinding?>(), View.OnClickListe
var requestMsg: String = Gson().toJson(msgMap) var requestMsg: String = Gson().toJson(msgMap)
Log.i(TAG, "requestMsg:$requestMsg") Log.i(TAG, "requestMsg:$requestMsg")
val postRequest = XHttp.post(requestUrl).keepJson(true).timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s val postRequest = XHttp.post(requestUrl).keepJson(true).timeStamp(true)
.cacheMode(CacheMode.NO_CACHE).timeStamp(true)
when (HttpServerUtils.clientSafetyMeasures) { when (HttpServerUtils.clientSafetyMeasures) {
2 -> { 2 -> {

View File

@ -196,11 +196,11 @@ class LogsFragment : BaseFragment<FragmentLogsBinding?>(), MsgPagingAdapter.OnIt
.title(R.string.details) .title(R.string.details)
.content(detailStr.toString()) .content(detailStr.toString())
.cancelable(true) .cancelable(true)
.positiveText(R.string.del) /*.positiveText(R.string.del)
.onPositive { _: MaterialDialog?, _: DialogAction? -> .onPositive { _: MaterialDialog?, _: DialogAction? ->
viewModel.delete(item.id) viewModel.delete(item.id)
XToastUtils.success(R.string.delete_log_toast) XToastUtils.success(R.string.delete_log_toast)
} }*/
.negativeText(R.string.resend) .negativeText(R.string.resend)
.onNegative { _: MaterialDialog?, _: DialogAction? -> .onNegative { _: MaterialDialog?, _: DialogAction? ->
XToastUtils.toast(R.string.resend_toast) XToastUtils.toast(R.string.resend_toast)

View File

@ -14,10 +14,8 @@ import com.idormy.sms.forwarder.utils.HttpServerUtils
import com.idormy.sms.forwarder.utils.Log import com.idormy.sms.forwarder.utils.Log
import com.idormy.sms.forwarder.utils.RSACrypt import com.idormy.sms.forwarder.utils.RSACrypt
import com.idormy.sms.forwarder.utils.SM4Crypt import com.idormy.sms.forwarder.utils.SM4Crypt
import com.idormy.sms.forwarder.utils.SettingUtils
import com.idormy.sms.forwarder.utils.XToastUtils import com.idormy.sms.forwarder.utils.XToastUtils
import com.xuexiang.xhttp2.XHttp import com.xuexiang.xhttp2.XHttp
import com.xuexiang.xhttp2.cache.model.CacheMode
import com.xuexiang.xhttp2.callback.SimpleCallBack import com.xuexiang.xhttp2.callback.SimpleCallBack
import com.xuexiang.xhttp2.exception.ApiException import com.xuexiang.xhttp2.exception.ApiException
import com.xuexiang.xpage.annotation.Page import com.xuexiang.xpage.annotation.Page
@ -66,11 +64,7 @@ class BatteryQueryFragment : BaseFragment<FragmentClientBatteryQueryBinding?>()
var requestMsg: String = Gson().toJson(msgMap) var requestMsg: String = Gson().toJson(msgMap)
Log.i(TAG, "requestMsg:$requestMsg") Log.i(TAG, "requestMsg:$requestMsg")
val postRequest = XHttp.post(requestUrl) val postRequest = XHttp.post(requestUrl).keepJson(true).timeStamp(true)
.keepJson(true)
.timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s
.cacheMode(CacheMode.NO_CACHE)
.timeStamp(true)
when (HttpServerUtils.clientSafetyMeasures) { when (HttpServerUtils.clientSafetyMeasures) {
2 -> { 2 -> {

View File

@ -27,13 +27,11 @@ import com.idormy.sms.forwarder.utils.PhoneUtils
import com.idormy.sms.forwarder.utils.PlaceholderHelper import com.idormy.sms.forwarder.utils.PlaceholderHelper
import com.idormy.sms.forwarder.utils.RSACrypt import com.idormy.sms.forwarder.utils.RSACrypt
import com.idormy.sms.forwarder.utils.SM4Crypt import com.idormy.sms.forwarder.utils.SM4Crypt
import com.idormy.sms.forwarder.utils.SettingUtils
import com.idormy.sms.forwarder.utils.XToastUtils import com.idormy.sms.forwarder.utils.XToastUtils
import com.jeremyliao.liveeventbus.LiveEventBus import com.jeremyliao.liveeventbus.LiveEventBus
import com.scwang.smartrefresh.layout.api.RefreshLayout import com.scwang.smartrefresh.layout.api.RefreshLayout
import com.xuexiang.xaop.annotation.SingleClick import com.xuexiang.xaop.annotation.SingleClick
import com.xuexiang.xhttp2.XHttp import com.xuexiang.xhttp2.XHttp
import com.xuexiang.xhttp2.cache.model.CacheMode
import com.xuexiang.xhttp2.callback.SimpleCallBack import com.xuexiang.xhttp2.callback.SimpleCallBack
import com.xuexiang.xhttp2.exception.ApiException import com.xuexiang.xhttp2.exception.ApiException
import com.xuexiang.xpage.annotation.Page import com.xuexiang.xpage.annotation.Page
@ -221,11 +219,7 @@ class CallQueryFragment : BaseFragment<FragmentClientCallQueryBinding?>() {
var requestMsg: String = Gson().toJson(msgMap) var requestMsg: String = Gson().toJson(msgMap)
Log.i(TAG, "requestMsg:$requestMsg") Log.i(TAG, "requestMsg:$requestMsg")
val postRequest = XHttp.post(requestUrl) val postRequest = XHttp.post(requestUrl).keepJson(true).timeStamp(true)
.keepJson(true)
.timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s
.cacheMode(CacheMode.NO_CACHE)
.timeStamp(true)
when (HttpServerUtils.clientSafetyMeasures) { when (HttpServerUtils.clientSafetyMeasures) {
2 -> { 2 -> {

View File

@ -359,8 +359,7 @@ class CloneFragment : BaseFragment<FragmentClientCloneBinding?>(), View.OnClickL
var requestMsg: String = Gson().toJson(msgMap) var requestMsg: String = Gson().toJson(msgMap)
Log.i(TAG, "requestMsg:$requestMsg") Log.i(TAG, "requestMsg:$requestMsg")
val postRequest = XHttp.post(requestUrl).keepJson(true).timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s val postRequest = XHttp.post(requestUrl).keepJson(true).timeStamp(true)
.cacheMode(CacheMode.NO_CACHE).timeStamp(true)
when (HttpServerUtils.clientSafetyMeasures) { when (HttpServerUtils.clientSafetyMeasures) {
2 -> { 2 -> {

View File

@ -14,7 +14,6 @@ import com.idormy.sms.forwarder.utils.*
import com.jeremyliao.liveeventbus.LiveEventBus import com.jeremyliao.liveeventbus.LiveEventBus
import com.xuexiang.xaop.annotation.SingleClick import com.xuexiang.xaop.annotation.SingleClick
import com.xuexiang.xhttp2.XHttp import com.xuexiang.xhttp2.XHttp
import com.xuexiang.xhttp2.cache.model.CacheMode
import com.xuexiang.xhttp2.callback.SimpleCallBack import com.xuexiang.xhttp2.callback.SimpleCallBack
import com.xuexiang.xhttp2.exception.ApiException import com.xuexiang.xhttp2.exception.ApiException
import com.xuexiang.xpage.annotation.Page import com.xuexiang.xpage.annotation.Page
@ -98,11 +97,7 @@ class ContactAddFragment : BaseFragment<FragmentClientContactAddBinding?>(), Vie
var requestMsg: String = Gson().toJson(msgMap) var requestMsg: String = Gson().toJson(msgMap)
Log.i(TAG, "requestMsg:$requestMsg") Log.i(TAG, "requestMsg:$requestMsg")
val postRequest = XHttp.post(requestUrl) val postRequest = XHttp.post(requestUrl).keepJson(true).timeStamp(true)
.keepJson(true)
.timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s
.cacheMode(CacheMode.NO_CACHE)
.timeStamp(true)
when (HttpServerUtils.clientSafetyMeasures) { when (HttpServerUtils.clientSafetyMeasures) {
2 -> { 2 -> {

View File

@ -27,13 +27,11 @@ import com.idormy.sms.forwarder.utils.PhoneUtils
import com.idormy.sms.forwarder.utils.PlaceholderHelper import com.idormy.sms.forwarder.utils.PlaceholderHelper
import com.idormy.sms.forwarder.utils.RSACrypt import com.idormy.sms.forwarder.utils.RSACrypt
import com.idormy.sms.forwarder.utils.SM4Crypt import com.idormy.sms.forwarder.utils.SM4Crypt
import com.idormy.sms.forwarder.utils.SettingUtils
import com.idormy.sms.forwarder.utils.XToastUtils import com.idormy.sms.forwarder.utils.XToastUtils
import com.jeremyliao.liveeventbus.LiveEventBus import com.jeremyliao.liveeventbus.LiveEventBus
import com.scwang.smartrefresh.layout.api.RefreshLayout import com.scwang.smartrefresh.layout.api.RefreshLayout
import com.xuexiang.xaop.annotation.SingleClick import com.xuexiang.xaop.annotation.SingleClick
import com.xuexiang.xhttp2.XHttp import com.xuexiang.xhttp2.XHttp
import com.xuexiang.xhttp2.cache.model.CacheMode
import com.xuexiang.xhttp2.callback.SimpleCallBack import com.xuexiang.xhttp2.callback.SimpleCallBack
import com.xuexiang.xhttp2.exception.ApiException import com.xuexiang.xhttp2.exception.ApiException
import com.xuexiang.xpage.annotation.Page import com.xuexiang.xpage.annotation.Page
@ -198,11 +196,7 @@ class ContactQueryFragment : BaseFragment<FragmentClientContactQueryBinding?>()
var requestMsg: String = Gson().toJson(msgMap) var requestMsg: String = Gson().toJson(msgMap)
Log.i(TAG, "requestMsg:$requestMsg") Log.i(TAG, "requestMsg:$requestMsg")
val postRequest = XHttp.post(requestUrl) val postRequest = XHttp.post(requestUrl).keepJson(true).timeStamp(true)
.keepJson(true)
.timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s
.cacheMode(CacheMode.NO_CACHE)
.timeStamp(true)
when (HttpServerUtils.clientSafetyMeasures) { when (HttpServerUtils.clientSafetyMeasures) {
2 -> { 2 -> {

View File

@ -19,7 +19,6 @@ import com.idormy.sms.forwarder.utils.SettingUtils
import com.idormy.sms.forwarder.utils.XToastUtils import com.idormy.sms.forwarder.utils.XToastUtils
import com.xuexiang.xaop.annotation.SingleClick import com.xuexiang.xaop.annotation.SingleClick
import com.xuexiang.xhttp2.XHttp import com.xuexiang.xhttp2.XHttp
import com.xuexiang.xhttp2.cache.model.CacheMode
import com.xuexiang.xhttp2.callback.SimpleCallBack import com.xuexiang.xhttp2.callback.SimpleCallBack
import com.xuexiang.xhttp2.exception.ApiException import com.xuexiang.xhttp2.exception.ApiException
import com.xuexiang.xpage.annotation.Page import com.xuexiang.xpage.annotation.Page
@ -98,8 +97,7 @@ class LocationFragment : BaseFragment<FragmentClientLocationBinding?>(), View.On
var requestMsg: String = Gson().toJson(msgMap) var requestMsg: String = Gson().toJson(msgMap)
Log.i(TAG, "requestMsg:$requestMsg") Log.i(TAG, "requestMsg:$requestMsg")
val postRequest = XHttp.post(requestUrl).keepJson(true).timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s val postRequest = XHttp.post(requestUrl).keepJson(true).timeStamp(true)
.cacheMode(CacheMode.NO_CACHE).timeStamp(true)
when (HttpServerUtils.clientSafetyMeasures) { when (HttpServerUtils.clientSafetyMeasures) {
2 -> { 2 -> {

View File

@ -26,13 +26,11 @@ import com.idormy.sms.forwarder.utils.Log
import com.idormy.sms.forwarder.utils.PlaceholderHelper import com.idormy.sms.forwarder.utils.PlaceholderHelper
import com.idormy.sms.forwarder.utils.RSACrypt import com.idormy.sms.forwarder.utils.RSACrypt
import com.idormy.sms.forwarder.utils.SM4Crypt import com.idormy.sms.forwarder.utils.SM4Crypt
import com.idormy.sms.forwarder.utils.SettingUtils
import com.idormy.sms.forwarder.utils.XToastUtils import com.idormy.sms.forwarder.utils.XToastUtils
import com.jeremyliao.liveeventbus.LiveEventBus import com.jeremyliao.liveeventbus.LiveEventBus
import com.scwang.smartrefresh.layout.api.RefreshLayout import com.scwang.smartrefresh.layout.api.RefreshLayout
import com.xuexiang.xaop.annotation.SingleClick import com.xuexiang.xaop.annotation.SingleClick
import com.xuexiang.xhttp2.XHttp import com.xuexiang.xhttp2.XHttp
import com.xuexiang.xhttp2.cache.model.CacheMode
import com.xuexiang.xhttp2.callback.SimpleCallBack import com.xuexiang.xhttp2.callback.SimpleCallBack
import com.xuexiang.xhttp2.exception.ApiException import com.xuexiang.xhttp2.exception.ApiException
import com.xuexiang.xpage.annotation.Page import com.xuexiang.xpage.annotation.Page
@ -209,11 +207,7 @@ class SmsQueryFragment : BaseFragment<FragmentClientSmsQueryBinding?>() {
var requestMsg: String = Gson().toJson(msgMap) var requestMsg: String = Gson().toJson(msgMap)
Log.i(TAG, "requestMsg:$requestMsg") Log.i(TAG, "requestMsg:$requestMsg")
val postRequest = XHttp.post(requestUrl) val postRequest = XHttp.post(requestUrl).keepJson(true).timeStamp(true)
.keepJson(true)
.timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s
.cacheMode(CacheMode.NO_CACHE)
.timeStamp(true)
when (HttpServerUtils.clientSafetyMeasures) { when (HttpServerUtils.clientSafetyMeasures) {
2 -> { 2 -> {

View File

@ -15,7 +15,6 @@ import com.idormy.sms.forwarder.utils.*
import com.jeremyliao.liveeventbus.LiveEventBus import com.jeremyliao.liveeventbus.LiveEventBus
import com.xuexiang.xaop.annotation.SingleClick import com.xuexiang.xaop.annotation.SingleClick
import com.xuexiang.xhttp2.XHttp import com.xuexiang.xhttp2.XHttp
import com.xuexiang.xhttp2.cache.model.CacheMode
import com.xuexiang.xhttp2.callback.SimpleCallBack import com.xuexiang.xhttp2.callback.SimpleCallBack
import com.xuexiang.xhttp2.exception.ApiException import com.xuexiang.xhttp2.exception.ApiException
import com.xuexiang.xpage.annotation.Page import com.xuexiang.xpage.annotation.Page
@ -116,11 +115,7 @@ class SmsSendFragment : BaseFragment<FragmentClientSmsSendBinding?>(), View.OnCl
var requestMsg: String = Gson().toJson(msgMap) var requestMsg: String = Gson().toJson(msgMap)
Log.i(TAG, "requestMsg:$requestMsg") Log.i(TAG, "requestMsg:$requestMsg")
val postRequest = XHttp.post(requestUrl) val postRequest = XHttp.post(requestUrl).keepJson(true).timeStamp(true)
.keepJson(true)
.timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s
.cacheMode(CacheMode.NO_CACHE)
.timeStamp(true)
when (HttpServerUtils.clientSafetyMeasures) { when (HttpServerUtils.clientSafetyMeasures) {
2 -> { 2 -> {

View File

@ -18,7 +18,6 @@ import com.idormy.sms.forwarder.utils.SettingUtils
import com.idormy.sms.forwarder.utils.XToastUtils import com.idormy.sms.forwarder.utils.XToastUtils
import com.xuexiang.xaop.annotation.SingleClick import com.xuexiang.xaop.annotation.SingleClick
import com.xuexiang.xhttp2.XHttp import com.xuexiang.xhttp2.XHttp
import com.xuexiang.xhttp2.cache.model.CacheMode
import com.xuexiang.xhttp2.callback.SimpleCallBack import com.xuexiang.xhttp2.callback.SimpleCallBack
import com.xuexiang.xhttp2.exception.ApiException import com.xuexiang.xhttp2.exception.ApiException
import com.xuexiang.xpage.annotation.Page import com.xuexiang.xpage.annotation.Page
@ -152,11 +151,7 @@ class WolSendFragment : BaseFragment<FragmentClientWolSendBinding?>(), View.OnCl
var requestMsg: String = Gson().toJson(msgMap) var requestMsg: String = Gson().toJson(msgMap)
Log.i(TAG, "requestMsg:$requestMsg") Log.i(TAG, "requestMsg:$requestMsg")
val postRequest = XHttp.post(requestUrl) val postRequest = XHttp.post(requestUrl).keepJson(true).timeStamp(true)
.keepJson(true)
.timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s
.cacheMode(CacheMode.NO_CACHE)
.timeStamp(true)
when (HttpServerUtils.clientSafetyMeasures) { when (HttpServerUtils.clientSafetyMeasures) {
2 -> { 2 -> {

View File

@ -222,7 +222,7 @@ object SendUtils {
if (logId == null || logId == 0L) { if (logId == null || logId == 0L) {
if (status == 2) { if (status == 2) {
LiveEventBus.get(EVENT_TOAST_SUCCESS, String::class.java).post(getString(R.string.request_succeeded)) LiveEventBus.get(EVENT_TOAST_SUCCESS, String::class.java).post(getString(R.string.request_succeeded))
} else { } else if (status == 0) {
LiveEventBus.get(EVENT_TOAST_ERROR, String::class.java).post(getString(R.string.request_failed) + response) LiveEventBus.get(EVENT_TOAST_ERROR, String::class.java).post(getString(R.string.request_failed) + response)
} }
return return

View File

@ -3,9 +3,12 @@ package com.idormy.sms.forwarder.utils.sdkinit
import android.app.Application import android.app.Application
import com.idormy.sms.forwarder.App import com.idormy.sms.forwarder.App
import com.idormy.sms.forwarder.core.BaseActivity import com.idormy.sms.forwarder.core.BaseActivity
import com.idormy.sms.forwarder.utils.SettingUtils
import com.idormy.sms.forwarder.utils.XToastUtils import com.idormy.sms.forwarder.utils.XToastUtils
import com.xuexiang.xaop.XAOP import com.xuexiang.xaop.XAOP
import com.xuexiang.xhttp2.XHttp
import com.xuexiang.xhttp2.XHttpSDK import com.xuexiang.xhttp2.XHttpSDK
import com.xuexiang.xhttp2.cache.model.CacheMode
import com.xuexiang.xpage.PageConfig import com.xuexiang.xpage.PageConfig
import com.xuexiang.xrouter.launcher.XRouter import com.xuexiang.xrouter.launcher.XRouter
import com.xuexiang.xui.XUI import com.xuexiang.xui.XUI
@ -61,13 +64,22 @@ class XBasicLibInit private constructor() {
if (App.isDebug) { if (App.isDebug) {
XHttpSDK.debug() XHttpSDK.debug()
} }
// XHttpSDK.debug(new CustomLoggingInterceptor()); //设置自定义的日志打印拦截器
//设置网络请求的全局基础地址 //设置网络请求的全局基础地址
XHttpSDK.setBaseUrl("https://gitee.com/") XHttpSDK.setBaseUrl("https://gitee.com/")
// //设置动态参数添加拦截器 //设置自定义的日志打印拦截器
// XHttpSDK.addInterceptor(new CustomDynamicInterceptor()); //XHttpSDK.debug(LoggingInterceptor())
// //请求失效校验拦截器 //设置动态参数添加拦截器
// XHttpSDK.addInterceptor(new CustomExpiredInterceptor()); //XHttpSDK.addInterceptor(CustomDynamicInterceptor())
//请求失效校验拦截器
//XHttpSDK.addInterceptor(CustomExpiredInterceptor())
//设置全局超时时间
XHttp.getInstance()
.debug(App.isDebug)
.setCacheMode(CacheMode.NO_CACHE)
.setTimeout(SettingUtils.requestTimeout * 1000L) //单次超时时间
//.setRetryCount(SettingUtils.requestRetryTimes) //超时重试的次数
//.setRetryDelay(SettingUtils.requestDelayTime * 1000) //超时重试的延迟时间
//.setRetryIncreaseDelay(SettingUtils.requestDelayTime * 1000) //超时重试叠加延时
} }
/** /**

View File

@ -2,16 +2,15 @@ package com.idormy.sms.forwarder.utils.sender
import android.text.TextUtils import android.text.TextUtils
import android.util.Base64 import android.util.Base64
import com.idormy.sms.forwarder.utils.Log
import com.google.gson.Gson import com.google.gson.Gson
import com.idormy.sms.forwarder.database.entity.Rule import com.idormy.sms.forwarder.database.entity.Rule
import com.idormy.sms.forwarder.entity.MsgInfo import com.idormy.sms.forwarder.entity.MsgInfo
import com.idormy.sms.forwarder.entity.result.BarkResult import com.idormy.sms.forwarder.entity.result.BarkResult
import com.idormy.sms.forwarder.entity.setting.BarkSetting import com.idormy.sms.forwarder.entity.setting.BarkSetting
import com.idormy.sms.forwarder.utils.Log
import com.idormy.sms.forwarder.utils.SendUtils import com.idormy.sms.forwarder.utils.SendUtils
import com.idormy.sms.forwarder.utils.SettingUtils import com.idormy.sms.forwarder.utils.SettingUtils
import com.xuexiang.xhttp2.XHttp import com.xuexiang.xhttp2.XHttp
import com.xuexiang.xhttp2.cache.model.CacheMode
import com.xuexiang.xhttp2.callback.SimpleCallBack import com.xuexiang.xhttp2.callback.SimpleCallBack
import com.xuexiang.xhttp2.exception.ApiException import com.xuexiang.xhttp2.exception.ApiException
import javax.crypto.Cipher import javax.crypto.Cipher
@ -98,12 +97,11 @@ class BarkUtils {
request.ignoreHttpsCert() //忽略https证书 request.ignoreHttpsCert() //忽略https证书
.keepJson(true) .keepJson(true)
.timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s
.cacheMode(CacheMode.NO_CACHE)
.retryCount(SettingUtils.requestRetryTimes) //超时重试的次数 .retryCount(SettingUtils.requestRetryTimes) //超时重试的次数
.retryDelay(SettingUtils.requestDelayTime) //超时重试的延迟时间 .retryDelay(SettingUtils.requestDelayTime * 1000) //超时重试的延迟时间
.retryIncreaseDelay(SettingUtils.requestDelayTime) //超时重试叠加延时 .retryIncreaseDelay(SettingUtils.requestDelayTime * 1000) //超时重试叠加延时
.timeStamp(true) .timeStamp(true) //url自动追加时间戳避免缓存
.addInterceptor(LoggingInterceptor(logId)) //增加一个log拦截器, 记录请求日志
.execute(object : SimpleCallBack<String>() { .execute(object : SimpleCallBack<String>() {
override fun onError(e: ApiException) { override fun onError(e: ApiException) {

View File

@ -2,16 +2,15 @@ package com.idormy.sms.forwarder.utils.sender
import android.text.TextUtils import android.text.TextUtils
import android.util.Base64 import android.util.Base64
import com.idormy.sms.forwarder.utils.Log
import com.google.gson.Gson import com.google.gson.Gson
import com.idormy.sms.forwarder.database.entity.Rule import com.idormy.sms.forwarder.database.entity.Rule
import com.idormy.sms.forwarder.entity.MsgInfo import com.idormy.sms.forwarder.entity.MsgInfo
import com.idormy.sms.forwarder.entity.result.DingtalkResult import com.idormy.sms.forwarder.entity.result.DingtalkResult
import com.idormy.sms.forwarder.entity.setting.DingtalkGroupRobotSetting import com.idormy.sms.forwarder.entity.setting.DingtalkGroupRobotSetting
import com.idormy.sms.forwarder.utils.Log
import com.idormy.sms.forwarder.utils.SendUtils import com.idormy.sms.forwarder.utils.SendUtils
import com.idormy.sms.forwarder.utils.SettingUtils import com.idormy.sms.forwarder.utils.SettingUtils
import com.xuexiang.xhttp2.XHttp import com.xuexiang.xhttp2.XHttp
import com.xuexiang.xhttp2.cache.model.CacheMode
import com.xuexiang.xhttp2.callback.SimpleCallBack import com.xuexiang.xhttp2.callback.SimpleCallBack
import com.xuexiang.xhttp2.exception.ApiException import com.xuexiang.xhttp2.exception.ApiException
import java.net.URLEncoder import java.net.URLEncoder
@ -100,12 +99,11 @@ class DingtalkGroupRobotUtils private constructor() {
XHttp.post(requestUrl) XHttp.post(requestUrl)
.upJson(requestMsg) .upJson(requestMsg)
.keepJson(true) .keepJson(true)
.timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s
.cacheMode(CacheMode.NO_CACHE)
.retryCount(SettingUtils.requestRetryTimes) //超时重试的次数 .retryCount(SettingUtils.requestRetryTimes) //超时重试的次数
.retryDelay(SettingUtils.requestDelayTime) //超时重试的延迟时间 .retryDelay(SettingUtils.requestDelayTime * 1000) //超时重试的延迟时间
.retryIncreaseDelay(SettingUtils.requestDelayTime) //超时重试叠加延时 .retryIncreaseDelay(SettingUtils.requestDelayTime * 1000) //超时重试叠加延时
.timeStamp(true) .timeStamp(true) //url自动追加时间戳避免缓存
.addInterceptor(LoggingInterceptor(logId)) //增加一个log拦截器, 记录请求日志
.execute(object : SimpleCallBack<String>() { .execute(object : SimpleCallBack<String>() {
override fun onError(e: ApiException) { override fun onError(e: ApiException) {

View File

@ -1,18 +1,17 @@
package com.idormy.sms.forwarder.utils.sender package com.idormy.sms.forwarder.utils.sender
import android.text.TextUtils import android.text.TextUtils
import com.idormy.sms.forwarder.utils.Log
import com.google.gson.Gson import com.google.gson.Gson
import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.R
import com.idormy.sms.forwarder.database.entity.Rule import com.idormy.sms.forwarder.database.entity.Rule
import com.idormy.sms.forwarder.entity.MsgInfo import com.idormy.sms.forwarder.entity.MsgInfo
import com.idormy.sms.forwarder.entity.result.DingtalkInnerRobotResult import com.idormy.sms.forwarder.entity.result.DingtalkInnerRobotResult
import com.idormy.sms.forwarder.entity.setting.DingtalkInnerRobotSetting import com.idormy.sms.forwarder.entity.setting.DingtalkInnerRobotSetting
import com.idormy.sms.forwarder.utils.Log
import com.idormy.sms.forwarder.utils.SendUtils import com.idormy.sms.forwarder.utils.SendUtils
import com.idormy.sms.forwarder.utils.SettingUtils import com.idormy.sms.forwarder.utils.SettingUtils
import com.idormy.sms.forwarder.utils.SharedPreference import com.idormy.sms.forwarder.utils.SharedPreference
import com.xuexiang.xhttp2.XHttp import com.xuexiang.xhttp2.XHttp
import com.xuexiang.xhttp2.cache.model.CacheMode
import com.xuexiang.xhttp2.callback.SimpleCallBack import com.xuexiang.xhttp2.callback.SimpleCallBack
import com.xuexiang.xhttp2.exception.ApiException import com.xuexiang.xhttp2.exception.ApiException
import com.xuexiang.xutil.net.NetworkUtils import com.xuexiang.xutil.net.NetworkUtils
@ -89,8 +88,15 @@ class DingtalkInnerRobotUtils private constructor() {
} }
} }
request.upJson(requestMsg).keepJson(true).ignoreHttpsCert().timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s request.upJson(requestMsg)
.cacheMode(CacheMode.NO_CACHE).timeStamp(true).execute(object : SimpleCallBack<String>() { .keepJson(true)
.ignoreHttpsCert()
.retryCount(SettingUtils.requestRetryTimes) //超时重试的次数
.retryDelay(SettingUtils.requestDelayTime * 1000) //超时重试的延迟时间
.retryIncreaseDelay(SettingUtils.requestDelayTime * 1000) //超时重试叠加延时
.timeStamp(true) //url自动追加时间戳避免缓存
.addInterceptor(LoggingInterceptor(logId)) //增加一个log拦截器, 记录请求日志
.execute(object : SimpleCallBack<String>() {
override fun onError(e: ApiException) { override fun onError(e: ApiException) {
Log.e(TAG, e.detailMessage) Log.e(TAG, e.detailMessage)
@ -195,11 +201,12 @@ class DingtalkInnerRobotUtils private constructor() {
request.upJson(requestMsg).headers("x-acs-dingtalk-access-token", accessToken) request.upJson(requestMsg).headers("x-acs-dingtalk-access-token", accessToken)
.keepJson(true) .keepJson(true)
.ignoreHttpsCert() .ignoreHttpsCert()
.timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s .retryCount(SettingUtils.requestRetryTimes) //超时重试的次数
.cacheMode(CacheMode.NO_CACHE).retryCount(SettingUtils.requestRetryTimes) //超时重试的次数 .retryDelay(SettingUtils.requestDelayTime * 1000) //超时重试的延迟时间
.retryDelay(SettingUtils.requestDelayTime) //超时重试的延迟时间 .retryIncreaseDelay(SettingUtils.requestDelayTime * 1000) //超时重试叠加延时
.retryIncreaseDelay(SettingUtils.requestDelayTime) //超时重试叠加延时 .timeStamp(true) //url自动追加时间戳避免缓存
.timeStamp(true).execute(object : SimpleCallBack<String>() { .addInterceptor(LoggingInterceptor(logId)) //增加一个log拦截器, 记录请求日志
.execute(object : SimpleCallBack<String>() {
override fun onError(e: ApiException) { override fun onError(e: ApiException) {
Log.e(TAG, e.detailMessage) Log.e(TAG, e.detailMessage)

View File

@ -1,18 +1,17 @@
package com.idormy.sms.forwarder.utils.sender package com.idormy.sms.forwarder.utils.sender
import android.text.TextUtils import android.text.TextUtils
import com.idormy.sms.forwarder.utils.Log
import com.google.gson.Gson import com.google.gson.Gson
import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.R
import com.idormy.sms.forwarder.database.entity.Rule import com.idormy.sms.forwarder.database.entity.Rule
import com.idormy.sms.forwarder.entity.MsgInfo import com.idormy.sms.forwarder.entity.MsgInfo
import com.idormy.sms.forwarder.entity.result.FeishuAppResult import com.idormy.sms.forwarder.entity.result.FeishuAppResult
import com.idormy.sms.forwarder.entity.setting.FeishuAppSetting import com.idormy.sms.forwarder.entity.setting.FeishuAppSetting
import com.idormy.sms.forwarder.utils.Log
import com.idormy.sms.forwarder.utils.SendUtils import com.idormy.sms.forwarder.utils.SendUtils
import com.idormy.sms.forwarder.utils.SettingUtils import com.idormy.sms.forwarder.utils.SettingUtils
import com.idormy.sms.forwarder.utils.SharedPreference import com.idormy.sms.forwarder.utils.SharedPreference
import com.xuexiang.xhttp2.XHttp import com.xuexiang.xhttp2.XHttp
import com.xuexiang.xhttp2.cache.model.CacheMode
import com.xuexiang.xhttp2.callback.SimpleCallBack import com.xuexiang.xhttp2.callback.SimpleCallBack
import com.xuexiang.xhttp2.exception.ApiException import com.xuexiang.xhttp2.exception.ApiException
import com.xuexiang.xutil.resource.ResUtils.getString import com.xuexiang.xutil.resource.ResUtils.getString
@ -47,8 +46,16 @@ class FeishuAppUtils private constructor() {
val requestMsg: String = Gson().toJson(msgMap) val requestMsg: String = Gson().toJson(msgMap)
Log.i(TAG, "requestMsg:$requestMsg") Log.i(TAG, "requestMsg:$requestMsg")
XHttp.post(requestUrl).upJson(requestMsg).keepJson(true).ignoreHttpsCert().timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s XHttp.post(requestUrl)
.cacheMode(CacheMode.NO_CACHE).timeStamp(true).execute(object : SimpleCallBack<String>() { .upJson(requestMsg)
.keepJson(true)
.ignoreHttpsCert()
.retryCount(SettingUtils.requestRetryTimes) //超时重试的次数
.retryDelay(SettingUtils.requestDelayTime * 1000) //超时重试的延迟时间
.retryIncreaseDelay(SettingUtils.requestDelayTime * 1000) //超时重试叠加延时
.timeStamp(true) //url自动追加时间戳避免缓存
.addInterceptor(LoggingInterceptor(logId)) //增加一个log拦截器, 记录请求日志
.execute(object : SimpleCallBack<String>() {
override fun onError(e: ApiException) { override fun onError(e: ApiException) {
Log.e(TAG, e.detailMessage) Log.e(TAG, e.detailMessage)
@ -115,11 +122,12 @@ class FeishuAppUtils private constructor() {
val accessToken: String by SharedPreference("feishu_access_token_" + setting.appId, "") val accessToken: String by SharedPreference("feishu_access_token_" + setting.appId, "")
XHttp.post(requestUrl).upJson(requestMsg).headers("Authorization", "Bearer $accessToken").keepJson(true) XHttp.post(requestUrl).upJson(requestMsg).headers("Authorization", "Bearer $accessToken").keepJson(true)
//.ignoreHttpsCert() //.ignoreHttpsCert()
.timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s .retryCount(SettingUtils.requestRetryTimes) //超时重试的次数
.cacheMode(CacheMode.NO_CACHE).retryCount(SettingUtils.requestRetryTimes) //超时重试的次数 .retryDelay(SettingUtils.requestDelayTime * 1000) //超时重试的延迟时间
.retryDelay(SettingUtils.requestDelayTime) //超时重试的延迟时间 .retryIncreaseDelay(SettingUtils.requestDelayTime * 1000) //超时重试叠加延时
.retryIncreaseDelay(SettingUtils.requestDelayTime) //超时重试叠加延时 .timeStamp(true) //url自动追加时间戳避免缓存
.timeStamp(true).execute(object : SimpleCallBack<String>() { .addInterceptor(LoggingInterceptor(logId)) //增加一个log拦截器, 记录请求日志
.execute(object : SimpleCallBack<String>() {
override fun onError(e: ApiException) { override fun onError(e: ApiException) {
Log.e(TAG, e.detailMessage) Log.e(TAG, e.detailMessage)

View File

@ -1,21 +1,21 @@
package com.idormy.sms.forwarder.utils.sender package com.idormy.sms.forwarder.utils.sender
import android.util.Base64 import android.util.Base64
import com.idormy.sms.forwarder.utils.Log
import com.google.gson.Gson import com.google.gson.Gson
import com.idormy.sms.forwarder.database.entity.Rule import com.idormy.sms.forwarder.database.entity.Rule
import com.idormy.sms.forwarder.entity.MsgInfo import com.idormy.sms.forwarder.entity.MsgInfo
import com.idormy.sms.forwarder.entity.result.FeishuResult import com.idormy.sms.forwarder.entity.result.FeishuResult
import com.idormy.sms.forwarder.entity.setting.FeishuSetting import com.idormy.sms.forwarder.entity.setting.FeishuSetting
import com.idormy.sms.forwarder.utils.Log
import com.idormy.sms.forwarder.utils.SendUtils import com.idormy.sms.forwarder.utils.SendUtils
import com.idormy.sms.forwarder.utils.SettingUtils import com.idormy.sms.forwarder.utils.SettingUtils
import com.xuexiang.xhttp2.XHttp import com.xuexiang.xhttp2.XHttp
import com.xuexiang.xhttp2.cache.model.CacheMode
import com.xuexiang.xhttp2.callback.SimpleCallBack import com.xuexiang.xhttp2.callback.SimpleCallBack
import com.xuexiang.xhttp2.exception.ApiException import com.xuexiang.xhttp2.exception.ApiException
import java.nio.charset.StandardCharsets import java.nio.charset.StandardCharsets
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.* import java.util.Date
import java.util.Locale
import javax.crypto.Mac import javax.crypto.Mac
import javax.crypto.spec.SecretKeySpec import javax.crypto.spec.SecretKeySpec
@ -135,12 +135,11 @@ class FeishuUtils private constructor() {
XHttp.post(requestUrl) XHttp.post(requestUrl)
.upJson(requestMsg) .upJson(requestMsg)
.keepJson(true) .keepJson(true)
.timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s
.cacheMode(CacheMode.NO_CACHE)
.retryCount(SettingUtils.requestRetryTimes) //超时重试的次数 .retryCount(SettingUtils.requestRetryTimes) //超时重试的次数
.retryDelay(SettingUtils.requestDelayTime) //超时重试的延迟时间 .retryDelay(SettingUtils.requestDelayTime * 1000) //超时重试的延迟时间
.retryIncreaseDelay(SettingUtils.requestDelayTime) //超时重试叠加延时 .retryIncreaseDelay(SettingUtils.requestDelayTime * 1000) //超时重试叠加延时
.timeStamp(true) .timeStamp(true) //url自动追加时间戳避免缓存
.addInterceptor(LoggingInterceptor(logId)) //增加一个log拦截器, 记录请求日志
.execute(object : SimpleCallBack<String>() { .execute(object : SimpleCallBack<String>() {
override fun onError(e: ApiException) { override fun onError(e: ApiException) {

View File

@ -1,15 +1,14 @@
package com.idormy.sms.forwarder.utils.sender package com.idormy.sms.forwarder.utils.sender
import com.idormy.sms.forwarder.utils.Log
import com.google.gson.Gson import com.google.gson.Gson
import com.idormy.sms.forwarder.database.entity.Rule import com.idormy.sms.forwarder.database.entity.Rule
import com.idormy.sms.forwarder.entity.MsgInfo import com.idormy.sms.forwarder.entity.MsgInfo
import com.idormy.sms.forwarder.entity.result.GotifyResult import com.idormy.sms.forwarder.entity.result.GotifyResult
import com.idormy.sms.forwarder.entity.setting.GotifySetting import com.idormy.sms.forwarder.entity.setting.GotifySetting
import com.idormy.sms.forwarder.utils.Log
import com.idormy.sms.forwarder.utils.SendUtils import com.idormy.sms.forwarder.utils.SendUtils
import com.idormy.sms.forwarder.utils.SettingUtils import com.idormy.sms.forwarder.utils.SettingUtils
import com.xuexiang.xhttp2.XHttp import com.xuexiang.xhttp2.XHttp
import com.xuexiang.xhttp2.cache.model.CacheMode
import com.xuexiang.xhttp2.callback.SimpleCallBack import com.xuexiang.xhttp2.callback.SimpleCallBack
import com.xuexiang.xhttp2.exception.ApiException import com.xuexiang.xhttp2.exception.ApiException
@ -55,12 +54,11 @@ class GotifyUtils {
.params("priority", setting.priority) .params("priority", setting.priority)
.ignoreHttpsCert() //忽略https证书 .ignoreHttpsCert() //忽略https证书
.keepJson(true) .keepJson(true)
.timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s
.cacheMode(CacheMode.NO_CACHE)
.retryCount(SettingUtils.requestRetryTimes) //超时重试的次数 .retryCount(SettingUtils.requestRetryTimes) //超时重试的次数
.retryDelay(SettingUtils.requestDelayTime) //超时重试的延迟时间 .retryDelay(SettingUtils.requestDelayTime * 1000) //超时重试的延迟时间
.retryIncreaseDelay(SettingUtils.requestDelayTime) //超时重试叠加延时 .retryIncreaseDelay(SettingUtils.requestDelayTime * 1000) //超时重试叠加延时
.timeStamp(true) .timeStamp(true) //url自动追加时间戳避免缓存
.addInterceptor(LoggingInterceptor(logId)) //增加一个log拦截器, 记录请求日志
.execute(object : SimpleCallBack<String>() { .execute(object : SimpleCallBack<String>() {
override fun onError(e: ApiException) { override fun onError(e: ApiException) {

View File

@ -0,0 +1,130 @@
package com.idormy.sms.forwarder.utils.sender
import com.idormy.sms.forwarder.App
import com.idormy.sms.forwarder.utils.Log
import com.idormy.sms.forwarder.utils.SendUtils
import com.xuexiang.xhttp2.interceptor.HttpLoggingInterceptor
import com.xuexiang.xhttp2.utils.HttpUtils
import com.xuexiang.xutil.data.DateUtils
import okhttp3.Connection
import okhttp3.Protocol
import okhttp3.Request
import okhttp3.Response
import okhttp3.ResponseBody
import okhttp3.internal.http.HttpHeaders
import java.io.IOException
import java.text.SimpleDateFormat
import java.util.Locale
@Suppress("PrivatePropertyName")
class LoggingInterceptor(private val logId: Long) : HttpLoggingInterceptor("custom") {
private val TAG: String = LoggingInterceptor::class.java.simpleName
init {
level = if (App.isDebug) Level.BODY else Level.PARAM
}
override fun log(message: String) {
Log.d(TAG, message)
//状态=-1不更新原状态
SendUtils.updateLogs(logId, -1, message)
}
/**
* 记录请求日志
*
* @param request
* @param connection
* @throws IOException
*/
@Throws(IOException::class)
override fun logForRequest(request: Request, connection: Connection?) {
if (level != Level.PARAM) {
log("------REQUEST------" + "\nAt " + DateUtils.getNowString(SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault())))
}
val logBody = level == Level.BODY || level == Level.PARAM
val logHeaders = level == Level.BODY || level == Level.HEADERS
val requestBody = request.body()
val hasRequestBody = requestBody != null
val protocol = connection?.protocol() ?: Protocol.HTTP_1_1
try {
val requestStartMessage = "--> ${request.method()} ${request.url()} $protocol"
log(requestStartMessage)
if (logHeaders) {
val headers = request.headers()
for (i in 0 until headers.size()) {
log("\t${headers.name(i)}: ${headers.value(i)}")
}
}
if (logBody && hasRequestBody) {
if (HttpUtils.isPlaintext(requestBody?.contentType())) {
log("\tbody:" + bodyToString(request))
} else {
log("\tbody: maybe [file part] , too large too print , ignored!")
}
}
} catch (e: Exception) {
onError(e)
} finally {
if (level != Level.PARAM) {
log("--> END ${request.method()}")
}
}
}
/**
* 记录响应日志
*
* @param response
* @param tookMs 请求花费的时间
* @return
*/
override fun logForResponse(response: Response, tookMs: Long): Response {
if (level != Level.PARAM) {
log("------RESPONSE------" + "\nAt " + DateUtils.getNowString(SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault())))
}
val builder = response.newBuilder()
val clone = builder.build()
var responseBody = clone.body()
val logBody = level == Level.BODY || level == Level.PARAM
val logHeaders = level == Level.BODY || level == Level.HEADERS
try {
log("<-- ${clone.code()} ${clone.message()} ${clone.request().url()} ($tookMs ms")
if (logHeaders) {
log(" ")
val headers = clone.headers()
for (i in 0 until headers.size()) {
log("\t${headers.name(i)}: ${headers.value(i)}")
}
log(" ")
}
if (logBody && HttpHeaders.hasBody(clone)) {
if (HttpUtils.isPlaintext(responseBody?.contentType())) {
val body = responseBody?.string()
log("\tbody:$body")
responseBody = ResponseBody.create(responseBody?.contentType(), body ?: "")
return response.newBuilder().body(responseBody).build()
} else {
log("\tbody: maybe [file part] , too large too print , ignored!")
}
if (level != Level.PARAM) {
log(" ")
}
}
} catch (e: Exception) {
onError(e)
} finally {
if (level != Level.PARAM) {
log("<-- END HTTP")
}
}
return response
}
}

View File

@ -1,17 +1,16 @@
package com.idormy.sms.forwarder.utils.sender package com.idormy.sms.forwarder.utils.sender
import android.text.TextUtils import android.text.TextUtils
import com.idormy.sms.forwarder.utils.Log
import com.google.gson.Gson import com.google.gson.Gson
import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.R
import com.idormy.sms.forwarder.database.entity.Rule import com.idormy.sms.forwarder.database.entity.Rule
import com.idormy.sms.forwarder.entity.MsgInfo import com.idormy.sms.forwarder.entity.MsgInfo
import com.idormy.sms.forwarder.entity.result.PushplusResult import com.idormy.sms.forwarder.entity.result.PushplusResult
import com.idormy.sms.forwarder.entity.setting.PushplusSetting import com.idormy.sms.forwarder.entity.setting.PushplusSetting
import com.idormy.sms.forwarder.utils.Log
import com.idormy.sms.forwarder.utils.SendUtils import com.idormy.sms.forwarder.utils.SendUtils
import com.idormy.sms.forwarder.utils.SettingUtils import com.idormy.sms.forwarder.utils.SettingUtils
import com.xuexiang.xhttp2.XHttp import com.xuexiang.xhttp2.XHttp
import com.xuexiang.xhttp2.cache.model.CacheMode
import com.xuexiang.xhttp2.callback.SimpleCallBack import com.xuexiang.xhttp2.callback.SimpleCallBack
import com.xuexiang.xhttp2.exception.ApiException import com.xuexiang.xhttp2.exception.ApiException
import com.xuexiang.xutil.resource.ResUtils.getString import com.xuexiang.xutil.resource.ResUtils.getString
@ -69,12 +68,11 @@ class PushplusUtils private constructor() {
XHttp.post(requestUrl) XHttp.post(requestUrl)
.upJson(requestMsg) .upJson(requestMsg)
.keepJson(true) .keepJson(true)
.timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s
.cacheMode(CacheMode.NO_CACHE)
.retryCount(SettingUtils.requestRetryTimes) //超时重试的次数 .retryCount(SettingUtils.requestRetryTimes) //超时重试的次数
.retryDelay(SettingUtils.requestDelayTime) //超时重试的延迟时间 .retryDelay(SettingUtils.requestDelayTime * 1000) //超时重试的延迟时间
.retryIncreaseDelay(SettingUtils.requestDelayTime) //超时重试叠加延时 .retryIncreaseDelay(SettingUtils.requestDelayTime * 1000) //超时重试叠加延时
.timeStamp(true) .timeStamp(true) //url自动追加时间戳避免缓存
.addInterceptor(LoggingInterceptor(logId)) //增加一个log拦截器, 记录请求日志
.execute(object : SimpleCallBack<String>() { .execute(object : SimpleCallBack<String>() {
override fun onError(e: ApiException) { override fun onError(e: ApiException) {

View File

@ -1,16 +1,15 @@
package com.idormy.sms.forwarder.utils.sender package com.idormy.sms.forwarder.utils.sender
import android.text.TextUtils import android.text.TextUtils
import com.idormy.sms.forwarder.utils.Log
import com.google.gson.Gson import com.google.gson.Gson
import com.idormy.sms.forwarder.database.entity.Rule import com.idormy.sms.forwarder.database.entity.Rule
import com.idormy.sms.forwarder.entity.MsgInfo import com.idormy.sms.forwarder.entity.MsgInfo
import com.idormy.sms.forwarder.entity.result.ServerchanResult import com.idormy.sms.forwarder.entity.result.ServerchanResult
import com.idormy.sms.forwarder.entity.setting.ServerchanSetting import com.idormy.sms.forwarder.entity.setting.ServerchanSetting
import com.idormy.sms.forwarder.utils.Log
import com.idormy.sms.forwarder.utils.SendUtils import com.idormy.sms.forwarder.utils.SendUtils
import com.idormy.sms.forwarder.utils.SettingUtils import com.idormy.sms.forwarder.utils.SettingUtils
import com.xuexiang.xhttp2.XHttp import com.xuexiang.xhttp2.XHttp
import com.xuexiang.xhttp2.cache.model.CacheMode
import com.xuexiang.xhttp2.callback.SimpleCallBack import com.xuexiang.xhttp2.callback.SimpleCallBack
import com.xuexiang.xhttp2.exception.ApiException import com.xuexiang.xhttp2.exception.ApiException
@ -49,12 +48,11 @@ class ServerchanUtils {
if (!TextUtils.isEmpty(setting.openid)) request.params("group", setting.openid) if (!TextUtils.isEmpty(setting.openid)) request.params("group", setting.openid)
request.keepJson(true) request.keepJson(true)
.timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s
.cacheMode(CacheMode.NO_CACHE)
.retryCount(SettingUtils.requestRetryTimes) //超时重试的次数 .retryCount(SettingUtils.requestRetryTimes) //超时重试的次数
.retryDelay(SettingUtils.requestDelayTime) //超时重试的延迟时间 .retryDelay(SettingUtils.requestDelayTime * 1000) //超时重试的延迟时间
.retryIncreaseDelay(SettingUtils.requestDelayTime) //超时重试叠加延时 .retryIncreaseDelay(SettingUtils.requestDelayTime * 1000) //超时重试叠加延时
.timeStamp(true) .timeStamp(true) //url自动追加时间戳避免缓存
.addInterceptor(LoggingInterceptor(logId)) //增加一个log拦截器, 记录请求日志
.execute(object : SimpleCallBack<String>() { .execute(object : SimpleCallBack<String>() {
override fun onError(e: ApiException) { override fun onError(e: ApiException) {

View File

@ -1,23 +1,26 @@
package com.idormy.sms.forwarder.utils.sender package com.idormy.sms.forwarder.utils.sender
import android.text.TextUtils import android.text.TextUtils
import com.idormy.sms.forwarder.utils.Log
import com.google.gson.Gson import com.google.gson.Gson
import com.idormy.sms.forwarder.database.entity.Rule import com.idormy.sms.forwarder.database.entity.Rule
import com.idormy.sms.forwarder.entity.MsgInfo import com.idormy.sms.forwarder.entity.MsgInfo
import com.idormy.sms.forwarder.entity.result.TelegramResult import com.idormy.sms.forwarder.entity.result.TelegramResult
import com.idormy.sms.forwarder.entity.setting.TelegramSetting import com.idormy.sms.forwarder.entity.setting.TelegramSetting
import com.idormy.sms.forwarder.utils.Log
import com.idormy.sms.forwarder.utils.SendUtils import com.idormy.sms.forwarder.utils.SendUtils
import com.idormy.sms.forwarder.utils.SettingUtils import com.idormy.sms.forwarder.utils.SettingUtils
import com.xuexiang.xhttp2.XHttp import com.xuexiang.xhttp2.XHttp
import com.xuexiang.xhttp2.cache.model.CacheMode
import com.xuexiang.xhttp2.callback.SimpleCallBack import com.xuexiang.xhttp2.callback.SimpleCallBack
import com.xuexiang.xhttp2.exception.ApiException import com.xuexiang.xhttp2.exception.ApiException
import com.xuexiang.xutil.net.NetworkUtils import com.xuexiang.xutil.net.NetworkUtils
import okhttp3.Credentials import okhttp3.Credentials
import okhttp3.Response import okhttp3.Response
import okhttp3.Route import okhttp3.Route
import java.net.* import java.net.Authenticator
import java.net.InetSocketAddress
import java.net.PasswordAuthentication
import java.net.Proxy
import java.net.URLEncoder
class TelegramUtils private constructor() { class TelegramUtils private constructor() {
companion object { companion object {
@ -106,12 +109,11 @@ class TelegramUtils private constructor() {
request.keepJson(true) request.keepJson(true)
//.ignoreHttpsCert() //.ignoreHttpsCert()
.timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s
.cacheMode(CacheMode.NO_CACHE)
.retryCount(SettingUtils.requestRetryTimes) //超时重试的次数 .retryCount(SettingUtils.requestRetryTimes) //超时重试的次数
.retryDelay(SettingUtils.requestDelayTime) //超时重试的延迟时间 .retryDelay(SettingUtils.requestDelayTime * 1000) //超时重试的延迟时间
.retryIncreaseDelay(SettingUtils.requestDelayTime) //超时重试叠加延时 .retryIncreaseDelay(SettingUtils.requestDelayTime * 1000) //超时重试叠加延时
.timeStamp(true) .timeStamp(true) //url自动追加时间戳避免缓存
.addInterceptor(LoggingInterceptor(logId)) //增加一个log拦截器, 记录请求日志
.execute(object : SimpleCallBack<String>() { .execute(object : SimpleCallBack<String>() {
override fun onError(e: ApiException) { override fun onError(e: ApiException) {

View File

@ -3,16 +3,15 @@ package com.idormy.sms.forwarder.utils.sender
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.text.TextUtils import android.text.TextUtils
import android.util.Base64 import android.util.Base64
import com.idormy.sms.forwarder.utils.Log
import com.google.gson.Gson import com.google.gson.Gson
import com.idormy.sms.forwarder.database.entity.Rule import com.idormy.sms.forwarder.database.entity.Rule
import com.idormy.sms.forwarder.entity.MsgInfo import com.idormy.sms.forwarder.entity.MsgInfo
import com.idormy.sms.forwarder.entity.setting.WebhookSetting import com.idormy.sms.forwarder.entity.setting.WebhookSetting
import com.idormy.sms.forwarder.utils.AppUtils import com.idormy.sms.forwarder.utils.AppUtils
import com.idormy.sms.forwarder.utils.Log
import com.idormy.sms.forwarder.utils.SendUtils import com.idormy.sms.forwarder.utils.SendUtils
import com.idormy.sms.forwarder.utils.SettingUtils import com.idormy.sms.forwarder.utils.SettingUtils
import com.xuexiang.xhttp2.XHttp import com.xuexiang.xhttp2.XHttp
import com.xuexiang.xhttp2.cache.model.CacheMode
import com.xuexiang.xhttp2.callback.SimpleCallBack import com.xuexiang.xhttp2.callback.SimpleCallBack
import com.xuexiang.xhttp2.exception.ApiException import com.xuexiang.xhttp2.exception.ApiException
import java.net.URLEncoder import java.net.URLEncoder
@ -182,12 +181,11 @@ class WebhookUtils {
} }
request.ignoreHttpsCert() //忽略https证书 request.ignoreHttpsCert() //忽略https证书
.timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s
.cacheMode(CacheMode.NO_CACHE)
.retryCount(SettingUtils.requestRetryTimes) //超时重试的次数 .retryCount(SettingUtils.requestRetryTimes) //超时重试的次数
.retryDelay(SettingUtils.requestDelayTime) //超时重试的延迟时间 .retryDelay(SettingUtils.requestDelayTime * 1000) //超时重试的延迟时间
.retryIncreaseDelay(SettingUtils.requestDelayTime) //超时重试叠加延时 .retryIncreaseDelay(SettingUtils.requestDelayTime * 1000) //超时重试叠加延时
.timeStamp(true) .timeStamp(true) //url自动追加时间戳避免缓存
.addInterceptor(LoggingInterceptor(logId)) //增加一个log拦截器, 记录请求日志
.execute(object : SimpleCallBack<String>() { .execute(object : SimpleCallBack<String>() {
override fun onError(e: ApiException) { override fun onError(e: ApiException) {

View File

@ -1,19 +1,17 @@
package com.idormy.sms.forwarder.utils.sender package com.idormy.sms.forwarder.utils.sender
import android.text.TextUtils import android.text.TextUtils
import com.idormy.sms.forwarder.utils.Log
import com.google.gson.Gson import com.google.gson.Gson
import com.idormy.sms.forwarder.R import com.idormy.sms.forwarder.R
import com.idormy.sms.forwarder.database.entity.Rule import com.idormy.sms.forwarder.database.entity.Rule
import com.idormy.sms.forwarder.entity.MsgInfo import com.idormy.sms.forwarder.entity.MsgInfo
import com.idormy.sms.forwarder.entity.result.DingtalkResult
import com.idormy.sms.forwarder.entity.result.WeworkAgentResult import com.idormy.sms.forwarder.entity.result.WeworkAgentResult
import com.idormy.sms.forwarder.entity.setting.WeworkAgentSetting import com.idormy.sms.forwarder.entity.setting.WeworkAgentSetting
import com.idormy.sms.forwarder.utils.Log
import com.idormy.sms.forwarder.utils.SendUtils import com.idormy.sms.forwarder.utils.SendUtils
import com.idormy.sms.forwarder.utils.SettingUtils import com.idormy.sms.forwarder.utils.SettingUtils
import com.idormy.sms.forwarder.utils.SharedPreference import com.idormy.sms.forwarder.utils.SharedPreference
import com.xuexiang.xhttp2.XHttp import com.xuexiang.xhttp2.XHttp
import com.xuexiang.xhttp2.cache.model.CacheMode
import com.xuexiang.xhttp2.callback.SimpleCallBack import com.xuexiang.xhttp2.callback.SimpleCallBack
import com.xuexiang.xhttp2.exception.ApiException import com.xuexiang.xhttp2.exception.ApiException
import com.xuexiang.xutil.net.NetworkUtils import com.xuexiang.xutil.net.NetworkUtils
@ -87,8 +85,14 @@ class WeworkAgentUtils private constructor() {
} }
} }
request.keepJson(true).ignoreHttpsCert().timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s request.keepJson(true)
.cacheMode(CacheMode.NO_CACHE).timeStamp(true).execute(object : SimpleCallBack<String>() { .ignoreHttpsCert()
.retryCount(SettingUtils.requestRetryTimes) //超时重试的次数
.retryDelay(SettingUtils.requestDelayTime * 1000) //超时重试的延迟时间
.retryIncreaseDelay(SettingUtils.requestDelayTime * 1000) //超时重试叠加延时
.timeStamp(true) //url自动追加时间戳避免缓存
.addInterceptor(LoggingInterceptor(logId)) //增加一个log拦截器, 记录请求日志
.execute(object : SimpleCallBack<String>() {
override fun onError(e: ApiException) { override fun onError(e: ApiException) {
Log.e(TAG, e.detailMessage) Log.e(TAG, e.detailMessage)
@ -181,11 +185,15 @@ class WeworkAgentUtils private constructor() {
} }
} }
request.upJson(requestMsg).keepJson(true).ignoreHttpsCert().timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s request.upJson(requestMsg)
.cacheMode(CacheMode.NO_CACHE).retryCount(SettingUtils.requestRetryTimes) //超时重试的次数 .keepJson(true)
.retryDelay(SettingUtils.requestDelayTime) //超时重试的延迟时间 .ignoreHttpsCert()
.retryIncreaseDelay(SettingUtils.requestDelayTime) //超时重试叠加延时 .retryCount(SettingUtils.requestRetryTimes) //超时重试的次数
.timeStamp(true).execute(object : SimpleCallBack<String>() { .retryDelay(SettingUtils.requestDelayTime * 1000) //超时重试的延迟时间
.retryIncreaseDelay(SettingUtils.requestDelayTime * 1000) //超时重试叠加延时
.timeStamp(true) //url自动追加时间戳避免缓存
.addInterceptor(LoggingInterceptor(logId)) //增加一个log拦截器, 记录请求日志
.execute(object : SimpleCallBack<String>() {
override fun onError(e: ApiException) { override fun onError(e: ApiException) {
Log.e(TAG, e.detailMessage) Log.e(TAG, e.detailMessage)
@ -197,7 +205,7 @@ class WeworkAgentUtils private constructor() {
override fun onSuccess(response: String) { override fun onSuccess(response: String) {
Log.i(TAG, response) Log.i(TAG, response)
val resp = Gson().fromJson(response, DingtalkResult::class.java) val resp = Gson().fromJson(response, WeworkAgentResult::class.java)
val status = if (resp?.errcode == 0L) 2 else 0 val status = if (resp?.errcode == 0L) 2 else 0
SendUtils.updateLogs(logId, status, response) SendUtils.updateLogs(logId, status, response)
SendUtils.senderLogic(status, msgInfo, rule, senderIndex, msgId) SendUtils.senderLogic(status, msgInfo, rule, senderIndex, msgId)

View File

@ -1,15 +1,14 @@
package com.idormy.sms.forwarder.utils.sender package com.idormy.sms.forwarder.utils.sender
import com.idormy.sms.forwarder.utils.Log
import com.google.gson.Gson import com.google.gson.Gson
import com.idormy.sms.forwarder.database.entity.Rule import com.idormy.sms.forwarder.database.entity.Rule
import com.idormy.sms.forwarder.entity.MsgInfo import com.idormy.sms.forwarder.entity.MsgInfo
import com.idormy.sms.forwarder.entity.result.WeworkRobotResult import com.idormy.sms.forwarder.entity.result.WeworkRobotResult
import com.idormy.sms.forwarder.entity.setting.WeworkRobotSetting import com.idormy.sms.forwarder.entity.setting.WeworkRobotSetting
import com.idormy.sms.forwarder.utils.Log
import com.idormy.sms.forwarder.utils.SendUtils import com.idormy.sms.forwarder.utils.SendUtils
import com.idormy.sms.forwarder.utils.SettingUtils import com.idormy.sms.forwarder.utils.SettingUtils
import com.xuexiang.xhttp2.XHttp import com.xuexiang.xhttp2.XHttp
import com.xuexiang.xhttp2.cache.model.CacheMode
import com.xuexiang.xhttp2.callback.SimpleCallBack import com.xuexiang.xhttp2.callback.SimpleCallBack
import com.xuexiang.xhttp2.exception.ApiException import com.xuexiang.xhttp2.exception.ApiException
@ -63,12 +62,11 @@ class WeworkRobotUtils private constructor() {
XHttp.post(requestUrl) XHttp.post(requestUrl)
.upJson(requestMsg) .upJson(requestMsg)
.keepJson(true) .keepJson(true)
.timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s
.cacheMode(CacheMode.NO_CACHE)
.retryCount(SettingUtils.requestRetryTimes) //超时重试的次数 .retryCount(SettingUtils.requestRetryTimes) //超时重试的次数
.retryDelay(SettingUtils.requestDelayTime) //超时重试的延迟时间 .retryDelay(SettingUtils.requestDelayTime * 1000) //超时重试的延迟时间
.retryIncreaseDelay(SettingUtils.requestDelayTime) //超时重试叠加延时 .retryIncreaseDelay(SettingUtils.requestDelayTime * 1000) //超时重试叠加延时
.timeStamp(true) .timeStamp(true) //url自动追加时间戳避免缓存
.addInterceptor(LoggingInterceptor(logId)) //增加一个log拦截器, 记录请求日志
.execute(object : SimpleCallBack<String>() { .execute(object : SimpleCallBack<String>() {
override fun onError(e: ApiException) { override fun onError(e: ApiException) {

View File

@ -21,8 +21,20 @@ class UpdateLogsWorker(
override suspend fun doWork(): Result = withContext(Dispatchers.IO) { override suspend fun doWork(): Result = withContext(Dispatchers.IO) {
try { try {
val sendResponseJson = inputData.getString(Worker.updateLogs) val sendResponseJson = inputData.getString(Worker.updateLogs)
Log.d("UpdateLogsWorker", "UpdateLogsWorker sendResponseJson: $sendResponseJson")
val sendResponse = Gson().fromJson(sendResponseJson, SendResponse::class.java) val sendResponse = Gson().fromJson(sendResponseJson, SendResponse::class.java)
Core.logs.updateStatus(sendResponse.logId, sendResponse.status, sendResponse.response + "\nAt " + DateUtils.getNowString(SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()))) if (sendResponse.logId == 0L) {
Log.e("UpdateLogsWorker", "UpdateLogsWorker error: logId is 0")
return@withContext Result.failure()
}
if (sendResponse.status >= 0) {
val response = sendResponse.response + "\nAt " + DateUtils.getNowString(SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()))
Thread.sleep(100) //让status=-1的日志先更新
Core.logs.updateStatus(sendResponse.logId, sendResponse.status, response)
} else {
Core.logs.updateResponse(sendResponse.logId, sendResponse.response)
}
return@withContext Result.success() return@withContext Result.success()
} catch (e: Exception) { } catch (e: Exception) {
e.printStackTrace() e.printStackTrace()