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

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
@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")
fun get(id: Long): Single<Logs>

View File

@ -17,6 +17,9 @@ class LogsRepository(private val logsDao: LogsDao) {
@WorkerThread
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)
}

View File

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

View File

@ -196,11 +196,11 @@ class LogsFragment : BaseFragment<FragmentLogsBinding?>(), MsgPagingAdapter.OnIt
.title(R.string.details)
.content(detailStr.toString())
.cancelable(true)
.positiveText(R.string.del)
/*.positiveText(R.string.del)
.onPositive { _: MaterialDialog?, _: DialogAction? ->
viewModel.delete(item.id)
XToastUtils.success(R.string.delete_log_toast)
}
}*/
.negativeText(R.string.resend)
.onNegative { _: MaterialDialog?, _: DialogAction? ->
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.RSACrypt
import com.idormy.sms.forwarder.utils.SM4Crypt
import com.idormy.sms.forwarder.utils.SettingUtils
import com.idormy.sms.forwarder.utils.XToastUtils
import com.xuexiang.xhttp2.XHttp
import com.xuexiang.xhttp2.cache.model.CacheMode
import com.xuexiang.xhttp2.callback.SimpleCallBack
import com.xuexiang.xhttp2.exception.ApiException
import com.xuexiang.xpage.annotation.Page
@ -66,11 +64,7 @@ class BatteryQueryFragment : BaseFragment<FragmentClientBatteryQueryBinding?>()
var requestMsg: String = Gson().toJson(msgMap)
Log.i(TAG, "requestMsg:$requestMsg")
val postRequest = XHttp.post(requestUrl)
.keepJson(true)
.timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s
.cacheMode(CacheMode.NO_CACHE)
.timeStamp(true)
val postRequest = XHttp.post(requestUrl).keepJson(true).timeStamp(true)
when (HttpServerUtils.clientSafetyMeasures) {
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.RSACrypt
import com.idormy.sms.forwarder.utils.SM4Crypt
import com.idormy.sms.forwarder.utils.SettingUtils
import com.idormy.sms.forwarder.utils.XToastUtils
import com.jeremyliao.liveeventbus.LiveEventBus
import com.scwang.smartrefresh.layout.api.RefreshLayout
import com.xuexiang.xaop.annotation.SingleClick
import com.xuexiang.xhttp2.XHttp
import com.xuexiang.xhttp2.cache.model.CacheMode
import com.xuexiang.xhttp2.callback.SimpleCallBack
import com.xuexiang.xhttp2.exception.ApiException
import com.xuexiang.xpage.annotation.Page
@ -221,11 +219,7 @@ class CallQueryFragment : BaseFragment<FragmentClientCallQueryBinding?>() {
var requestMsg: String = Gson().toJson(msgMap)
Log.i(TAG, "requestMsg:$requestMsg")
val postRequest = XHttp.post(requestUrl)
.keepJson(true)
.timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s
.cacheMode(CacheMode.NO_CACHE)
.timeStamp(true)
val postRequest = XHttp.post(requestUrl).keepJson(true).timeStamp(true)
when (HttpServerUtils.clientSafetyMeasures) {
2 -> {

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -222,7 +222,7 @@ object SendUtils {
if (logId == null || logId == 0L) {
if (status == 2) {
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)
}
return

View File

@ -3,9 +3,12 @@ package com.idormy.sms.forwarder.utils.sdkinit
import android.app.Application
import com.idormy.sms.forwarder.App
import com.idormy.sms.forwarder.core.BaseActivity
import com.idormy.sms.forwarder.utils.SettingUtils
import com.idormy.sms.forwarder.utils.XToastUtils
import com.xuexiang.xaop.XAOP
import com.xuexiang.xhttp2.XHttp
import com.xuexiang.xhttp2.XHttpSDK
import com.xuexiang.xhttp2.cache.model.CacheMode
import com.xuexiang.xpage.PageConfig
import com.xuexiang.xrouter.launcher.XRouter
import com.xuexiang.xui.XUI
@ -61,13 +64,22 @@ class XBasicLibInit private constructor() {
if (App.isDebug) {
XHttpSDK.debug()
}
// XHttpSDK.debug(new CustomLoggingInterceptor()); //设置自定义的日志打印拦截器
//设置网络请求的全局基础地址
XHttpSDK.setBaseUrl("https://gitee.com/")
// //设置动态参数添加拦截器
// XHttpSDK.addInterceptor(new CustomDynamicInterceptor());
// //请求失效校验拦截器
// XHttpSDK.addInterceptor(new CustomExpiredInterceptor());
//设置自定义的日志打印拦截器
//XHttpSDK.debug(LoggingInterceptor())
//设置动态参数添加拦截器
//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.util.Base64
import com.idormy.sms.forwarder.utils.Log
import com.google.gson.Gson
import com.idormy.sms.forwarder.database.entity.Rule
import com.idormy.sms.forwarder.entity.MsgInfo
import com.idormy.sms.forwarder.entity.result.BarkResult
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.SettingUtils
import com.xuexiang.xhttp2.XHttp
import com.xuexiang.xhttp2.cache.model.CacheMode
import com.xuexiang.xhttp2.callback.SimpleCallBack
import com.xuexiang.xhttp2.exception.ApiException
import javax.crypto.Cipher
@ -98,12 +97,11 @@ class BarkUtils {
request.ignoreHttpsCert() //忽略https证书
.keepJson(true)
.timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s
.cacheMode(CacheMode.NO_CACHE)
.retryCount(SettingUtils.requestRetryTimes) //超时重试的次数
.retryDelay(SettingUtils.requestDelayTime) //超时重试的延迟时间
.retryIncreaseDelay(SettingUtils.requestDelayTime) //超时重试叠加延时
.timeStamp(true)
.retryDelay(SettingUtils.requestDelayTime * 1000) //超时重试的延迟时间
.retryIncreaseDelay(SettingUtils.requestDelayTime * 1000) //超时重试叠加延时
.timeStamp(true) //url自动追加时间戳避免缓存
.addInterceptor(LoggingInterceptor(logId)) //增加一个log拦截器, 记录请求日志
.execute(object : SimpleCallBack<String>() {
override fun onError(e: ApiException) {

View File

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

View File

@ -1,18 +1,17 @@
package com.idormy.sms.forwarder.utils.sender
import android.text.TextUtils
import com.idormy.sms.forwarder.utils.Log
import com.google.gson.Gson
import com.idormy.sms.forwarder.R
import com.idormy.sms.forwarder.database.entity.Rule
import com.idormy.sms.forwarder.entity.MsgInfo
import com.idormy.sms.forwarder.entity.result.DingtalkInnerRobotResult
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.SettingUtils
import com.idormy.sms.forwarder.utils.SharedPreference
import com.xuexiang.xhttp2.XHttp
import com.xuexiang.xhttp2.cache.model.CacheMode
import com.xuexiang.xhttp2.callback.SimpleCallBack
import com.xuexiang.xhttp2.exception.ApiException
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
.cacheMode(CacheMode.NO_CACHE).timeStamp(true).execute(object : SimpleCallBack<String>() {
request.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) {
Log.e(TAG, e.detailMessage)
@ -195,11 +201,12 @@ class DingtalkInnerRobotUtils private constructor() {
request.upJson(requestMsg).headers("x-acs-dingtalk-access-token", accessToken)
.keepJson(true)
.ignoreHttpsCert()
.timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s
.cacheMode(CacheMode.NO_CACHE).retryCount(SettingUtils.requestRetryTimes) //超时重试的次数
.retryDelay(SettingUtils.requestDelayTime) //超时重试的延迟时间
.retryIncreaseDelay(SettingUtils.requestDelayTime) //超时重试叠加延时
.timeStamp(true).execute(object : SimpleCallBack<String>() {
.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) {
Log.e(TAG, e.detailMessage)

View File

@ -1,18 +1,17 @@
package com.idormy.sms.forwarder.utils.sender
import android.text.TextUtils
import com.idormy.sms.forwarder.utils.Log
import com.google.gson.Gson
import com.idormy.sms.forwarder.R
import com.idormy.sms.forwarder.database.entity.Rule
import com.idormy.sms.forwarder.entity.MsgInfo
import com.idormy.sms.forwarder.entity.result.FeishuAppResult
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.SettingUtils
import com.idormy.sms.forwarder.utils.SharedPreference
import com.xuexiang.xhttp2.XHttp
import com.xuexiang.xhttp2.cache.model.CacheMode
import com.xuexiang.xhttp2.callback.SimpleCallBack
import com.xuexiang.xhttp2.exception.ApiException
import com.xuexiang.xutil.resource.ResUtils.getString
@ -47,8 +46,16 @@ class FeishuAppUtils private constructor() {
val requestMsg: String = Gson().toJson(msgMap)
Log.i(TAG, "requestMsg:$requestMsg")
XHttp.post(requestUrl).upJson(requestMsg).keepJson(true).ignoreHttpsCert().timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s
.cacheMode(CacheMode.NO_CACHE).timeStamp(true).execute(object : SimpleCallBack<String>() {
XHttp.post(requestUrl)
.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) {
Log.e(TAG, e.detailMessage)
@ -115,11 +122,12 @@ class FeishuAppUtils private constructor() {
val accessToken: String by SharedPreference("feishu_access_token_" + setting.appId, "")
XHttp.post(requestUrl).upJson(requestMsg).headers("Authorization", "Bearer $accessToken").keepJson(true)
//.ignoreHttpsCert()
.timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s
.cacheMode(CacheMode.NO_CACHE).retryCount(SettingUtils.requestRetryTimes) //超时重试的次数
.retryDelay(SettingUtils.requestDelayTime) //超时重试的延迟时间
.retryIncreaseDelay(SettingUtils.requestDelayTime) //超时重试叠加延时
.timeStamp(true).execute(object : SimpleCallBack<String>() {
.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) {
Log.e(TAG, e.detailMessage)

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,19 +1,17 @@
package com.idormy.sms.forwarder.utils.sender
import android.text.TextUtils
import com.idormy.sms.forwarder.utils.Log
import com.google.gson.Gson
import com.idormy.sms.forwarder.R
import com.idormy.sms.forwarder.database.entity.Rule
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.setting.WeworkAgentSetting
import com.idormy.sms.forwarder.utils.Log
import com.idormy.sms.forwarder.utils.SendUtils
import com.idormy.sms.forwarder.utils.SettingUtils
import com.idormy.sms.forwarder.utils.SharedPreference
import com.xuexiang.xhttp2.XHttp
import com.xuexiang.xhttp2.cache.model.CacheMode
import com.xuexiang.xhttp2.callback.SimpleCallBack
import com.xuexiang.xhttp2.exception.ApiException
import com.xuexiang.xutil.net.NetworkUtils
@ -87,8 +85,14 @@ class WeworkAgentUtils private constructor() {
}
}
request.keepJson(true).ignoreHttpsCert().timeOut((SettingUtils.requestTimeout * 1000).toLong()) //超时时间10s
.cacheMode(CacheMode.NO_CACHE).timeStamp(true).execute(object : SimpleCallBack<String>() {
request.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) {
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
.cacheMode(CacheMode.NO_CACHE).retryCount(SettingUtils.requestRetryTimes) //超时重试的次数
.retryDelay(SettingUtils.requestDelayTime) //超时重试的延迟时间
.retryIncreaseDelay(SettingUtils.requestDelayTime) //超时重试叠加延时
.timeStamp(true).execute(object : SimpleCallBack<String>() {
request.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) {
Log.e(TAG, e.detailMessage)
@ -197,7 +205,7 @@ class WeworkAgentUtils private constructor() {
override fun onSuccess(response: String) {
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
SendUtils.updateLogs(logId, status, response)
SendUtils.senderLogic(status, msgInfo, rule, senderIndex, msgId)

View File

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

View File

@ -21,8 +21,20 @@ class UpdateLogsWorker(
override suspend fun doWork(): Result = withContext(Dispatchers.IO) {
try {
val sendResponseJson = inputData.getString(Worker.updateLogs)
Log.d("UpdateLogsWorker", "UpdateLogsWorker sendResponseJson: $sendResponseJson")
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()
} catch (e: Exception) {
e.printStackTrace()