Commit 8fa95e5a by 刘鹏

feat:去除无服务状态提示,阿里云日志加入channel信息方便问题排查

parent d5e9314c
...@@ -283,7 +283,7 @@ class AudioHomeActivity : ...@@ -283,7 +283,7 @@ class AudioHomeActivity :
LogUtil.e("[agora]发生警告回调$warn") LogUtil.e("[agora]发生警告回调$warn")
writeAgoraLog("声网警告回调($warn)") writeAgoraLog("声网警告回调($warn)")
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "声网警告回调($warn)") .sendRichLog(AliYunLogConfig.AGORA, "声网警告回调($warn) channelId:${channelId}")
//103:没有可用的频道资源。可能是因为服务端没法分配频道资源 //103:没有可用的频道资源。可能是因为服务端没法分配频道资源
//104:查找频道超时。在加入频道时 SDK 先要查找指定的频道,出现该警告一般是因为网络太差,连接不到服务器 //104:查找频道超时。在加入频道时 SDK 先要查找指定的频道,出现该警告一般是因为网络太差,连接不到服务器
//105:查找频道请求被服务器拒绝。服务器可能没有办法处理这个请求或请求是非法的 //105:查找频道请求被服务器拒绝。服务器可能没有办法处理这个请求或请求是非法的
...@@ -301,7 +301,7 @@ class AudioHomeActivity : ...@@ -301,7 +301,7 @@ class AudioHomeActivity :
uploadException("mRtcEventHandler-onError:errorCode--%${err}", callback = null) uploadException("mRtcEventHandler-onError:errorCode--%${err}", callback = null)
writeAgoraLog("声网错误回调errorCode--%${err}") writeAgoraLog("声网错误回调errorCode--%${err}")
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "声网错误回调errorCode--%${err}") .sendRichLog(AliYunLogConfig.AGORA, "声网错误回调errorCode--%${err} channelId:${channelId}")
//3:SDK 初始化失败。Agora 建议尝试以下处理方法 //3:SDK 初始化失败。Agora 建议尝试以下处理方法
//7:SDK 尚未初始化,就调用其 API。请确认在调用 API 之前已创建 RtcEngine 对象并完成初始化 //7:SDK 尚未初始化,就调用其 API。请确认在调用 API 之前已创建 RtcEngine 对象并完成初始化
//9:没有操作权限。请检查用户是否授予 app 音视频设备使用权限。 //9:没有操作权限。请检查用户是否授予 app 音视频设备使用权限。
...@@ -367,7 +367,7 @@ class AudioHomeActivity : ...@@ -367,7 +367,7 @@ class AudioHomeActivity :
super.onRtcStats(stats) super.onRtcStats(stats)
writeAgoraLog("声网onRtcStats:users:${stats?.users}") writeAgoraLog("声网onRtcStats:users:${stats?.users}")
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "声网onRtcStats:users:${stats?.users}") .sendRichLog(AliYunLogConfig.AGORA, "声网onRtcStats:users:${stats?.users} channelId:${channelId}")
// 不需要移动端做离开房间逻辑,服务端会判断进行踢人逻辑 // 不需要移动端做离开房间逻辑,服务端会判断进行踢人逻辑
//因为用户端直接加入了频道,防止该回调执行时,专家还未加入频道,因此在连接成功之后,才进行频道人数判断 //因为用户端直接加入了频道,防止该回调执行时,专家还未加入频道,因此在连接成功之后,才进行频道人数判断
// if (isConnectSuccess && null != stats?.users && stats.users == 1) { // if (isConnectSuccess && null != stats?.users && stats.users == 1) {
...@@ -391,7 +391,7 @@ class AudioHomeActivity : ...@@ -391,7 +391,7 @@ class AudioHomeActivity :
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog( .sendRichLog(
AliYunLogConfig.AGORA, AliYunLogConfig.AGORA,
"通话结束:网络连接被服务器中止 该情况现在是因为后端踢人逻辑,原因(${reason})" "通话结束:网络连接被服务器中止 该情况现在是因为后端踢人逻辑,原因(${reason}) channelId:${channelId}"
) )
// com.yidianling.common.tools.ToastUtil.toastShort("专家已挂断") // com.yidianling.common.tools.ToastUtil.toastShort("专家已挂断")
//通话结束或挂断时,上传日志文件 //通话结束或挂断时,上传日志文件
...@@ -407,7 +407,7 @@ class AudioHomeActivity : ...@@ -407,7 +407,7 @@ class AudioHomeActivity :
LogUtil.e("[agora]离开频道回调") LogUtil.e("[agora]离开频道回调")
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "离开频道回调") .sendRichLog(AliYunLogConfig.AGORA, "离开频道回调 channelId:${channelId}")
//通话结束或挂断时,上传日志文件 //通话结束或挂断时,上传日志文件
uploadLog() uploadLog()
} }
...@@ -419,7 +419,7 @@ class AudioHomeActivity : ...@@ -419,7 +419,7 @@ class AudioHomeActivity :
LogUtil.e("[agora]远端用户/主播加入频道回调") LogUtil.e("[agora]远端用户/主播加入频道回调")
onPeerJoined() onPeerJoined()
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "远端用户/主播加入频道回调") .sendRichLog(AliYunLogConfig.AGORA, "远端用户/主播加入频道回调 channelId:${channelId}")
} }
override fun onUserOffline(uid: Int, elapsed: Int) { override fun onUserOffline(uid: Int, elapsed: Int) {
...@@ -429,7 +429,7 @@ class AudioHomeActivity : ...@@ -429,7 +429,7 @@ class AudioHomeActivity :
LogUtil.e("[agora]远端用户$uid 离开频道回调") LogUtil.e("[agora]远端用户$uid 离开频道回调")
writeAgoraLog("接通后通话结束:对方已挂断") writeAgoraLog("接通后通话结束:对方已挂断")
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "接通后通话结束:对方已挂断") .sendRichLog(AliYunLogConfig.AGORA, "接通后通话结束:对方已挂断 channelId:${channelId}")
//通话结束或挂断时,上传日志文件 //通话结束或挂断时,上传日志文件
uploadLog() uploadLog()
showToast("专家已挂断") showToast("专家已挂断")
...@@ -465,6 +465,8 @@ class AudioHomeActivity : ...@@ -465,6 +465,8 @@ class AudioHomeActivity :
if (txQuality in 1..2 && rxQuality in 1..2) { if (txQuality in 1..2 && rxQuality in 1..2) {
"" ""
} else if (txQuality >= 5 || rxQuality >= 5) { } else if (txQuality >= 5 || rxQuality >= 5) {
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "您的网络已断开 channelId:${channelId}")
"您的网络已断开" "您的网络已断开"
} else { } else {
status = if (txQuality >= 4 || rxQuality >= 4) { status = if (txQuality >= 4 || rxQuality >= 4) {
...@@ -472,6 +474,8 @@ class AudioHomeActivity : ...@@ -472,6 +474,8 @@ class AudioHomeActivity :
} else { } else {
1 1
} }
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "您的网络状况不佳 channelId:${channelId}")
"您的网络状况不佳" "您的网络状况不佳"
} }
} }
...@@ -479,6 +483,8 @@ class AudioHomeActivity : ...@@ -479,6 +483,8 @@ class AudioHomeActivity :
if (txQuality in 1..2 && rxQuality in 1..2) { if (txQuality in 1..2 && rxQuality in 1..2) {
"" ""
} else if (txQuality >= 5 || rxQuality >= 5) { } else if (txQuality >= 5 || rxQuality >= 5) {
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "对方的网络已断开 channelId:${channelId}")
"对方的网络已断开" "对方的网络已断开"
} else { } else {
status = if (txQuality >= 4 || rxQuality >= 4) { status = if (txQuality >= 4 || rxQuality >= 4) {
...@@ -486,6 +492,8 @@ class AudioHomeActivity : ...@@ -486,6 +492,8 @@ class AudioHomeActivity :
} else { } else {
1 1
} }
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "对方的网络状况不佳 channelId:${channelId}")
"对方的网络状况不佳" "对方的网络状况不佳"
} }
} }
...@@ -515,7 +523,7 @@ class AudioHomeActivity : ...@@ -515,7 +523,7 @@ class AudioHomeActivity :
writeAgoraLog("通话页面打开的时候,RTM登录状态码:${YDLavManager.sdkStatus}") writeAgoraLog("通话页面打开的时候,RTM登录状态码:${YDLavManager.sdkStatus}")
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.RTM, "通话页面打开的时候,RTM登录状态码:${YDLavManager.sdkStatus}") .sendRichLog(AliYunLogConfig.RTM, "通话页面打开的时候,RTM登录状态码:${YDLavManager.sdkStatus} channelId:${channelId}")
if (YDLavManager.sdkStatus != Constants.CONNECTION_STATE_CONNECTED) { if (YDLavManager.sdkStatus != Constants.CONNECTION_STATE_CONNECTED) {
//再次登录声网,确保声网登录状态 //再次登录声网,确保声网登录状态
reLoginRTM() reLoginRTM()
...@@ -588,7 +596,7 @@ class AudioHomeActivity : ...@@ -588,7 +596,7 @@ class AudioHomeActivity :
dialStatus = intent.getStringExtra(IntentConstants.INTENT_DIALSTATUS) dialStatus = intent.getStringExtra(IntentConstants.INTENT_DIALSTATUS)
writeAgoraLog("专家的通话状态dialStatus:$dialStatus", false) writeAgoraLog("专家的通话状态dialStatus:$dialStatus", false)
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "专家的通话状态dialStatus:$dialStatus") .sendRichLog(AliYunLogConfig.AGORA, "专家的通话状态dialStatus:$dialStatus channelId:${channelId}")
isShowAXB = intent.getBooleanExtra(IntentConstants.INTENT_ISSHOWAXB, true) isShowAXB = intent.getBooleanExtra(IntentConstants.INTENT_ISSHOWAXB, true)
val logBean = AgoraLogInfoBean( val logBean = AgoraLogInfoBean(
...@@ -604,7 +612,7 @@ class AudioHomeActivity : ...@@ -604,7 +612,7 @@ class AudioHomeActivity :
val content = Gson().toJson(logBean) val content = Gson().toJson(logBean)
writeAgoraLog("主叫方发送的邀请通话消息内容:$content", true) writeAgoraLog("主叫方发送的邀请通话消息内容:$content", true)
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "主叫方发送的邀请通话消息内容:$content") .sendRichLog(AliYunLogConfig.AGORA, "主叫方发送的邀请通话消息内容:$content channelId:${channelId}")
localRemainTime = remainTime?.toInt() ?: 1500 localRemainTime = remainTime?.toInt() ?: 1500
handler = Handler() handler = Handler()
...@@ -630,7 +638,7 @@ class AudioHomeActivity : ...@@ -630,7 +638,7 @@ class AudioHomeActivity :
writeAgoraLog("RMT状态:${YDLavManager.sdkStatus},重新登录RMT") writeAgoraLog("RMT状态:${YDLavManager.sdkStatus},重新登录RMT")
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.RTM, "RMT状态:${YDLavManager.sdkStatus},重新登录RMTt") .sendRichLog(AliYunLogConfig.RTM, "RMT状态:${YDLavManager.sdkStatus},重新登录RMTt channelId:${channelId}")
val uid = YdlCommonRouterManager.getYdlCommonRoute().getUid().toString() val uid = YdlCommonRouterManager.getYdlCommonRoute().getUid().toString()
YDLavManager.instances.login(uid) { _isSuccess, _msg -> YDLavManager.instances.login(uid) { _isSuccess, _msg ->
// writeAgoraLog("拨打电话界面打开RTM重新登录,uid=${uid}") // writeAgoraLog("拨打电话界面打开RTM重新登录,uid=${uid}")
...@@ -644,7 +652,7 @@ class AudioHomeActivity : ...@@ -644,7 +652,7 @@ class AudioHomeActivity :
callEventSave("20", "通话页面打开") callEventSave("20", "通话页面打开")
writeAgoraLog("用户拨打电话界面开启") writeAgoraLog("用户拨打电话界面开启")
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "用户拨打电话界面开启") .sendRichLog(AliYunLogConfig.AGORA, "用户拨打电话界面开启 channelId:${channelId}")
//水波纹view初始化 //水波纹view初始化
wave_view.setDuration(6000) wave_view.setDuration(6000)
wave_view.setStyle(Paint.Style.STROKE) wave_view.setStyle(Paint.Style.STROKE)
...@@ -695,13 +703,13 @@ class AudioHomeActivity : ...@@ -695,13 +703,13 @@ class AudioHomeActivity :
audio_mute_text.text = "麦克风已关" audio_mute_text.text = "麦克风已关"
voiceManage?.getVoiceApi()?.enableLocalAudio(false) voiceManage?.getVoiceApi()?.enableLocalAudio(false)
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "用户端点击:麦克风已关") .sendRichLog(AliYunLogConfig.AGORA, "用户端点击:麦克风已关 channelId:${channelId}")
} else { } else {
iv_mute_on_off.isSelected = true iv_mute_on_off.isSelected = true
iv_mute_on_off.setImageResource(R.drawable.audiohome_muteon) iv_mute_on_off.setImageResource(R.drawable.audiohome_muteon)
audio_mute_text.text = "麦克风已开" audio_mute_text.text = "麦克风已开"
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "用户端点击:麦克风已开") .sendRichLog(AliYunLogConfig.AGORA, "用户端点击:麦克风已开 channelId:${channelId}")
voiceManage?.getVoiceApi()?.enableLocalAudio(true) voiceManage?.getVoiceApi()?.enableLocalAudio(true)
} }
} }
...@@ -713,7 +721,7 @@ class AudioHomeActivity : ...@@ -713,7 +721,7 @@ class AudioHomeActivity :
return@setOnClickListener return@setOnClickListener
} }
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "用户端点击:切换线路") .sendRichLog(AliYunLogConfig.AGORA, "用户端点击:切换线路 channelId:${channelId}")
ActionCountUtils.record("call_phone_page", "call_phone_icon_click", "0", "4") ActionCountUtils.record("call_phone_page", "call_phone_icon_click", "0", "4")
showChooseDialog(1) showChooseDialog(1)
...@@ -722,7 +730,7 @@ class AudioHomeActivity : ...@@ -722,7 +730,7 @@ class AudioHomeActivity :
iv_hang_up.setOnClickListener { iv_hang_up.setOnClickListener {
if (!canHangUp) { if (!canHangUp) {
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "用户端点击:挂断,展示提示弹窗") .sendRichLog(AliYunLogConfig.AGORA, "用户端点击:挂断,展示提示弹窗 channelId:${channelId}")
showHangUpTimeOnlineDialog() showHangUpTimeOnlineDialog()
return@setOnClickListener return@setOnClickListener
} }
...@@ -734,7 +742,7 @@ class AudioHomeActivity : ...@@ -734,7 +742,7 @@ class AudioHomeActivity :
if (isConnectSuccess) { if (isConnectSuccess) {
writeAgoraLog("已接通:主叫主动挂断") writeAgoraLog("已接通:主叫主动挂断")
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "已接通:主叫主动挂断") .sendRichLog(AliYunLogConfig.AGORA, "已接通:主叫主动挂断 channelId:${channelId}")
updateExpertStatus(false, 1) updateExpertStatus(false, 1)
leaveChannel() leaveChannel()
uploadLog() uploadLog()
...@@ -759,13 +767,13 @@ class AudioHomeActivity : ...@@ -759,13 +767,13 @@ class AudioHomeActivity :
iv_hands_free.setImageResource(R.drawable.audioim_img_hands_free_unuse) iv_hands_free.setImageResource(R.drawable.audioim_img_hands_free_unuse)
hands_free_text.text="扬声器已关" hands_free_text.text="扬声器已关"
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "用户端点击:免提,扬声器已关") .sendRichLog(AliYunLogConfig.AGORA, "用户端点击:免提,扬声器已关 channelId:${channelId}")
} else { } else {
iv_hands_free.isSelected = true iv_hands_free.isSelected = true
iv_hands_free.setImageResource(R.drawable.audioim_img_hands_free) iv_hands_free.setImageResource(R.drawable.audioim_img_hands_free)
hands_free_text.text="扬声器已开" hands_free_text.text="扬声器已开"
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "用户端点击:免提,扬声器已开") .sendRichLog(AliYunLogConfig.AGORA, "用户端点击:免提,扬声器已开 channelId:${channelId}")
} }
//已经接通 //已经接通
...@@ -796,7 +804,7 @@ class AudioHomeActivity : ...@@ -796,7 +804,7 @@ class AudioHomeActivity :
writeAgoraLog("请求音频权限通过") writeAgoraLog("请求音频权限通过")
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "请求音频权限通过") .sendRichLog(AliYunLogConfig.AGORA, "请求音频权限通过 channelId:${channelId}")
init() init()
} }
...@@ -812,7 +820,7 @@ class AudioHomeActivity : ...@@ -812,7 +820,7 @@ class AudioHomeActivity :
writeAgoraLog("拒绝请求音频权限") writeAgoraLog("拒绝请求音频权限")
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "拒绝请求音频权限") .sendRichLog(AliYunLogConfig.AGORA, "拒绝请求音频权限 channelId:${channelId}")
uploadLog() uploadLog()
showStorageDialog() showStorageDialog()
...@@ -823,7 +831,7 @@ class AudioHomeActivity : ...@@ -823,7 +831,7 @@ class AudioHomeActivity :
callEventSave("80", "请求音频权限异常${e.message}") callEventSave("80", "请求音频权限异常${e.message}")
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "请求音频权限异常${e.message}") .sendRichLog(AliYunLogConfig.AGORA, "请求音频权限异常${e.message} channelId:${channelId}")
init() init()
} }
...@@ -934,7 +942,7 @@ class AudioHomeActivity : ...@@ -934,7 +942,7 @@ class AudioHomeActivity :
writeAgoraLog("主叫(用户)发送通话邀请") writeAgoraLog("主叫(用户)发送通话邀请")
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "主叫(用户)发送通话邀请$msgBean") .sendRichLog(AliYunLogConfig.AGORA, "主叫(用户)发送通话邀请$msgBean channelId:${channelId}")
rtcCall() rtcCall()
//开始50s等待倒计时 //开始50s等待倒计时
...@@ -987,7 +995,7 @@ class AudioHomeActivity : ...@@ -987,7 +995,7 @@ class AudioHomeActivity :
LogUtil.d(it.message) LogUtil.d(it.message)
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "倒计时异常${it.message}") .sendRichLog(AliYunLogConfig.AGORA, "倒计时异常${it.message} channelId:${channelId}")
dismissHangUpTimeOnlineDialog() dismissHangUpTimeOnlineDialog()
...@@ -1007,7 +1015,7 @@ class AudioHomeActivity : ...@@ -1007,7 +1015,7 @@ class AudioHomeActivity :
writeAgoraLog("未接通挂断:50s等待倒计时结束挂断") writeAgoraLog("未接通挂断:50s等待倒计时结束挂断")
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "未接通挂断:50s等待倒计时结束挂断") .sendRichLog(AliYunLogConfig.AGORA, "未接通挂断:50s等待倒计时结束挂断 channelId:${channelId}")
//提示切换传统线路 //提示切换传统线路
//发送消息通知专家用户已挂断 //发送消息通知专家用户已挂断
YDLavManager.instances.cancelCall( YDLavManager.instances.cancelCall(
...@@ -1021,7 +1029,7 @@ class AudioHomeActivity : ...@@ -1021,7 +1029,7 @@ class AudioHomeActivity :
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog( .sendRichLog(
AliYunLogConfig.AGORA, AliYunLogConfig.AGORA,
"未接听时:主叫(用户)主动挂断失败,msg=$msg($code),再次挂断" "未接听时:主叫(用户)主动挂断失败,msg=$msg($code),再次挂断 channelId:${channelId}"
) )
} }
//通话结束或挂断时,上传日志文件 //通话结束或挂断时,上传日志文件
...@@ -1081,7 +1089,7 @@ class AudioHomeActivity : ...@@ -1081,7 +1089,7 @@ class AudioHomeActivity :
writeAgoraLog("未接听时:主叫(用户)主动挂断,取消呼叫") writeAgoraLog("未接听时:主叫(用户)主动挂断,取消呼叫")
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "未接听时:主叫(用户)主动挂断,取消呼叫") .sendRichLog(AliYunLogConfig.AGORA, "未接听时:主叫(用户)主动挂断,取消呼叫 channelId:${channelId}")
LogUtil.e("未接听挂断") LogUtil.e("未接听挂断")
//发送消息通知专家用户已挂断 //发送消息通知专家用户已挂断
YDLavManager.instances.cancelCall( YDLavManager.instances.cancelCall(
...@@ -1093,7 +1101,7 @@ class AudioHomeActivity : ...@@ -1093,7 +1101,7 @@ class AudioHomeActivity :
writeAgoraLog("未接听时:主叫(用户)主动挂断失败,msg=$msg($code),再次挂断") writeAgoraLog("未接听时:主叫(用户)主动挂断失败,msg=$msg($code),再次挂断")
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "未接听时:主叫(用户)主动挂断失败,msg=$msg($code),再次挂断") .sendRichLog(AliYunLogConfig.AGORA, "未接听时:主叫(用户)主动挂断失败,msg=$msg($code),再次挂断 channelId:${channelId}")
} }
//通话结束或挂断时,上传日志文件 //通话结束或挂断时,上传日志文件
uploadLog() uploadLog()
...@@ -1129,7 +1137,7 @@ class AudioHomeActivity : ...@@ -1129,7 +1137,7 @@ class AudioHomeActivity :
writeAgoraLog("主叫点击切换AXB按钮") writeAgoraLog("主叫点击切换AXB按钮")
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "主叫点击切换AXB按钮") .sendRichLog(AliYunLogConfig.AGORA, "主叫点击切换AXB按钮 channelId:${channelId}")
switchAXB() switchAXB()
} }
...@@ -1155,7 +1163,7 @@ class AudioHomeActivity : ...@@ -1155,7 +1163,7 @@ class AudioHomeActivity :
writeAgoraLog("离开房间成功,主叫切换AXB之后") writeAgoraLog("离开房间成功,主叫切换AXB之后")
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "离开房间成功,主叫切换AXB之后") .sendRichLog(AliYunLogConfig.AGORA, "离开房间成功,主叫切换AXB之后 channelId:${channelId}")
mPresenter.getAXBPhone(ConnectCommand(listenId!!, "1")) mPresenter.getAXBPhone(ConnectCommand(listenId!!, "1"))
} }
...@@ -1192,7 +1200,7 @@ class AudioHomeActivity : ...@@ -1192,7 +1200,7 @@ class AudioHomeActivity :
writeAgoraLog("未接听时:主叫主动挂断失败,msg=$msg($code),再次挂断") writeAgoraLog("未接听时:主叫主动挂断失败,msg=$msg($code),再次挂断")
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "未接听时:主叫主动挂断失败,msg=$msg($code),再次挂断") .sendRichLog(AliYunLogConfig.AGORA, "未接听时:主叫主动挂断失败,msg=$msg($code),再次挂断 channelId:${channelId}")
} }
leaveChannel() leaveChannel()
} }
...@@ -1419,7 +1427,7 @@ class AudioHomeActivity : ...@@ -1419,7 +1427,7 @@ class AudioHomeActivity :
cmd.status = "CALL_OFF" cmd.status = "CALL_OFF"
} }
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "用户加入频道后,通知服务端发送推送") .sendRichLog(AliYunLogConfig.AGORA, "用户加入频道后,通知服务端发送推送 channelId:${channelId}")
mPresenter.noticeServerPush(cmd) mPresenter.noticeServerPush(cmd)
} }
......
...@@ -119,6 +119,18 @@ class ConsultantAudioHomeActivity : ...@@ -119,6 +119,18 @@ class ConsultantAudioHomeActivity :
*/ */
private var isConnectSuccess: Boolean = false private var isConnectSuccess: Boolean = false
companion object {
const val PARAM: String = "param"
//0.未接听 1.已接听
const val STATUS_NOT_ANSWERED = 0
const val STATUS_ANSWERED = 1
//666.未接听,直接挂断 667.已接听,正常挂断 668:未接听,用户端取消了
const val RESULT_NOT_ANSWERED_CODE = 666
const val RESULT_ANSWERED_CODE = 667
const val RESULT_USER_CANCEL = 668
}
/** /**
* 事件回调 (SDK 通过指定的事件通知应用程序 SDK 的运行事件,如: 加入或离开频道,新用户加入频道等) * 事件回调 (SDK 通过指定的事件通知应用程序 SDK 的运行事件,如: 加入或离开频道,新用户加入频道等)
*/ */
...@@ -131,6 +143,8 @@ class ConsultantAudioHomeActivity : ...@@ -131,6 +143,8 @@ class ConsultantAudioHomeActivity :
*/ */
override fun onUserMuteAudio(uid: Int, muted: Boolean) { override fun onUserMuteAudio(uid: Int, muted: Boolean) {
callEventSave("80", "uid:${uid} 开启了静音 = ${muted}") callEventSave("80", "uid:${uid} 开启了静音 = ${muted}")
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "咨询用户端:咨询用户端:uid:${uid} 开启了静音 = ${muted} channelId:${mAudioMessageBean?.channelId}")
// runOnUiThread { // runOnUiThread {
// showToast("对方静音了,提醒他打开!") // showToast("对方静音了,提醒他打开!")
// } // }
...@@ -143,12 +157,12 @@ class ConsultantAudioHomeActivity : ...@@ -143,12 +157,12 @@ class ConsultantAudioHomeActivity :
LogUtil.e("[agora]$uid 加入频道回调") LogUtil.e("[agora]$uid 加入频道回调")
writeAgoraLog("被叫(用户)加入声网($channel)频道成功") writeAgoraLog("被叫(用户)加入声网($channel)频道成功")
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "被叫(用户)加入声网($channel)频道成功") .sendRichLog(AliYunLogConfig.AGORA, "咨询用户端:被叫(用户)uid:${uid}加入声网($channel)频道成功")
runOnUiThread { runOnUiThread {
// 加入频道后再通知用户已接受 // 加入频道后再通知用户已接受
// YDLRTMClient.instances.acceptCall(mAudioMessageBean?.channelId) // YDLRTMClient.instances.acceptCall(mAudioMessageBean?.channelId)
YDLavManager.instances.acceptCall( YDLavManager.instances.acceptCall(
mAudioMessageBean!!.userId!!, mAudioMessageBean?.userId!!,
mAudioMessageBean?.channelId, mAudioMessageBean?.channelId,
Gson().toJson(mAudioMessageBean) Gson().toJson(mAudioMessageBean)
) )
...@@ -174,7 +188,7 @@ class ConsultantAudioHomeActivity : ...@@ -174,7 +188,7 @@ class ConsultantAudioHomeActivity :
LogUtil.e("[agora]$uid 重新加入频道回调") LogUtil.e("[agora]$uid 重新加入频道回调")
writeAgoraLog("被叫(用户)重新加入声网频道($channel)成功") writeAgoraLog("被叫(用户)重新加入声网频道($channel)成功")
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "被叫(用户)重新加入声网频道($channel)成功") .sendRichLog(AliYunLogConfig.AGORA, "咨询用户端:被叫(用户)uid:${uid} 重新加入声网频道($channel)成功")
runOnUiThread { runOnUiThread {
if (!isConnectSuccess) { if (!isConnectSuccess) {
...@@ -195,7 +209,7 @@ class ConsultantAudioHomeActivity : ...@@ -195,7 +209,7 @@ class ConsultantAudioHomeActivity :
LogUtil.e("[agora]远端用户加入频道回调") LogUtil.e("[agora]远端用户加入频道回调")
writeAgoraLog("主叫(专家)加入声网频道成功") writeAgoraLog("主叫(专家)加入声网频道成功")
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.AGORA, "主叫(专家)加入声网频道成功") AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.AGORA, "咨询用户端:主叫(专家)uid:${uid}加入声网频道成功 channelId:${mAudioMessageBean?.channelId}")
//另一方加入频道成功 //另一方加入频道成功
runOnUiThread { runOnUiThread {
...@@ -269,7 +283,7 @@ class ConsultantAudioHomeActivity : ...@@ -269,7 +283,7 @@ class ConsultantAudioHomeActivity :
callEventSave("52", "自己离开频道回调") callEventSave("52", "自己离开频道回调")
LogUtil.e("[agora]自己离开频道回调") LogUtil.e("[agora]自己离开频道回调")
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.AGORA, "自己离开频道回调") AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.AGORA, "咨询用户端:自己离开频道回调 channelId:${mAudioMessageBean?.channelId}")
//通知php 通话已结束 //通知php 通话已结束
close(RESULT_ANSWERED_CODE, "") close(RESULT_ANSWERED_CODE, "")
...@@ -313,7 +327,7 @@ class ConsultantAudioHomeActivity : ...@@ -313,7 +327,7 @@ class ConsultantAudioHomeActivity :
showToast("对方已挂断") showToast("对方已挂断")
writeAgoraLog("通话接通后挂断:主叫(专家)离开频道") writeAgoraLog("通话接通后挂断:主叫(专家)离开频道")
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "通话接通后挂断:主叫(专家)离开频道") .sendRichLog(AliYunLogConfig.AGORA, "咨询用户端:通话接通后挂断:主叫(专家)$uid 离开频道 channelId:${mAudioMessageBean?.channelId}")
if (null != totalDisposable) { if (null != totalDisposable) {
totalDisposable!!.dispose() totalDisposable!!.dispose()
...@@ -331,7 +345,7 @@ class ConsultantAudioHomeActivity : ...@@ -331,7 +345,7 @@ class ConsultantAudioHomeActivity :
} }
LogUtil.e("[agora]发生警告回调=$warn") LogUtil.e("[agora]发生警告回调=$warn")
writeAgoraLog("声网警告回调码:($warn)") writeAgoraLog("声网警告回调码:($warn)")
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.AGORA, "声网警告回调码:($warn)") AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.AGORA, "咨询用户端:声网警告回调码:($warn) channelId:${mAudioMessageBean?.channelId}")
//103:没有可用的频道资源。可能是因为服务端没法分配频道资源 //103:没有可用的频道资源。可能是因为服务端没法分配频道资源
//104:查找频道超时。在加入频道时 SDK 先要查找指定的频道,出现该警告一般是因为网络太差,连接不到服务器 //104:查找频道超时。在加入频道时 SDK 先要查找指定的频道,出现该警告一般是因为网络太差,连接不到服务器
...@@ -359,7 +373,7 @@ class ConsultantAudioHomeActivity : ...@@ -359,7 +373,7 @@ class ConsultantAudioHomeActivity :
LogUtil.e("[agora] 发生错误回调 =$err") LogUtil.e("[agora] 发生错误回调 =$err")
writeAgoraLog("声网错误回调errorCode--%${err}") writeAgoraLog("声网错误回调errorCode--%${err}")
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "声网错误回调errorCode--%${err}") .sendRichLog(AliYunLogConfig.AGORA, "咨询用户端:声网错误回调errorCode--%${err} channelId:${mAudioMessageBean?.channelId}")
//3:SDK 初始化失败。Agora 建议尝试以下处理方法 //3:SDK 初始化失败。Agora 建议尝试以下处理方法
//7:SDK 尚未初始化,就调用其 API。请确认在调用 API 之前已创建 RtcEngine 对象并完成初始化 //7:SDK 尚未初始化,就调用其 API。请确认在调用 API 之前已创建 RtcEngine 对象并完成初始化
...@@ -411,7 +425,7 @@ class ConsultantAudioHomeActivity : ...@@ -411,7 +425,7 @@ class ConsultantAudioHomeActivity :
YDLavManager.instances.callEndStatusUpdate( YDLavManager.instances.callEndStatusUpdate(
mAudioMessageBean?.channelId!!, mAudioMessageBean?.channelId!!,
4, 4,
"频道的错误回调信息${err}" "频道的错误回调信息${err} "
) )
} }
} }
...@@ -430,6 +444,8 @@ class ConsultantAudioHomeActivity : ...@@ -430,6 +444,8 @@ class ConsultantAudioHomeActivity :
if (txQuality in 1..2 && rxQuality in 1..2) { if (txQuality in 1..2 && rxQuality in 1..2) {
"" ""
} else if (txQuality >= 5 || rxQuality >= 5) { } else if (txQuality >= 5 || rxQuality >= 5) {
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "咨询用户端:您的网络已断开 channelId:${mAudioMessageBean?.channelId}")
"您的网络已断开" "您的网络已断开"
} else { } else {
status = if (txQuality >= 4 || rxQuality >= 4) { status = if (txQuality >= 4 || rxQuality >= 4) {
...@@ -437,6 +453,8 @@ class ConsultantAudioHomeActivity : ...@@ -437,6 +453,8 @@ class ConsultantAudioHomeActivity :
} else { } else {
1 1
} }
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "咨询用户端:您的网络状况不佳 channelId:${mAudioMessageBean?.channelId}")
"您的网络状况不佳" "您的网络状况不佳"
} }
} }
...@@ -444,6 +462,8 @@ class ConsultantAudioHomeActivity : ...@@ -444,6 +462,8 @@ class ConsultantAudioHomeActivity :
if (txQuality in 1..2 && rxQuality in 1..2) { if (txQuality in 1..2 && rxQuality in 1..2) {
"" ""
} else if (txQuality >= 5 || rxQuality >= 5) { } else if (txQuality >= 5 || rxQuality >= 5) {
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "咨询用户端:对方的网络已断开 channelId:${mAudioMessageBean?.channelId}")
"对方的网络已断开" "对方的网络已断开"
} else { } else {
status = if (txQuality >= 4 || rxQuality >= 4) { status = if (txQuality >= 4 || rxQuality >= 4) {
...@@ -451,6 +471,8 @@ class ConsultantAudioHomeActivity : ...@@ -451,6 +471,8 @@ class ConsultantAudioHomeActivity :
} else { } else {
1 1
} }
AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "咨询用户端:对方的网络状况不佳 channelId:${mAudioMessageBean?.channelId}")
"对方的网络状况不佳" "对方的网络状况不佳"
} }
} }
...@@ -468,18 +490,7 @@ class ConsultantAudioHomeActivity : ...@@ -468,18 +490,7 @@ class ConsultantAudioHomeActivity :
return R.layout.audioim_cativity_consultant_audio_home return R.layout.audioim_cativity_consultant_audio_home
} }
companion object {
const val PARAM: String = "param"
//0.未接听 1.已接听
const val STATUS_NOT_ANSWERED = 0
const val STATUS_ANSWERED = 1
//666.未接听,直接挂断 667.已接听,正常挂断 668:未接听,用户端取消了
const val RESULT_NOT_ANSWERED_CODE = 666
const val RESULT_ANSWERED_CODE = 667
const val RESULT_USER_CANCEL = 668
}
override fun initDataAndEvent() { override fun initDataAndEvent() {
EventBus.getDefault().register(this) EventBus.getDefault().register(this)
...@@ -607,7 +618,7 @@ class ConsultantAudioHomeActivity : ...@@ -607,7 +618,7 @@ class ConsultantAudioHomeActivity :
callEventSave("90", "通话频道不存在") callEventSave("90", "通话频道不存在")
LogUtil.e("[agora]token not null") LogUtil.e("[agora]token not null")
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.AGORA, "token isEmpty ") AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.AGORA, "咨询用户端:token isEmpty channelId:${mAudioMessageBean?.channelId}")
showToast("通话频道不存在") showToast("通话频道不存在")
finish() finish()
...@@ -691,7 +702,7 @@ class ConsultantAudioHomeActivity : ...@@ -691,7 +702,7 @@ class ConsultantAudioHomeActivity :
LogUtil.e("[agora] joinChannel:$account") LogUtil.e("[agora] joinChannel:$account")
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "joinChannel:$account") .sendRichLog(AliYunLogConfig.AGORA, "咨询用户端:joinChannel:$account channelId:${mAudioMessageBean?.channelId}")
voiceManage?.getVoiceApi()?.joinChannel( voiceManage?.getVoiceApi()?.joinChannel(
channelToken channelToken
...@@ -929,7 +940,7 @@ class ConsultantAudioHomeActivity : ...@@ -929,7 +940,7 @@ class ConsultantAudioHomeActivity :
runOnUiThread { runOnUiThread {
LogUtil.e("[agora]close(code:$code,msg:$msg)") LogUtil.e("[agora]close(code:$code,msg:$msg)")
AliYunRichLogsHelper.getInstance() AliYunRichLogsHelper.getInstance()
.sendRichLog(AliYunLogConfig.AGORA, "close(code:$code,msg:$msg)") .sendRichLog(AliYunLogConfig.AGORA, "咨询用户端:close(code:$code,msg:$msg) channelId:${mAudioMessageBean?.channelId}")
//上传日志文件 //上传日志文件
uploadLog() uploadLog()
...@@ -940,6 +951,8 @@ class ConsultantAudioHomeActivity : ...@@ -940,6 +951,8 @@ class ConsultantAudioHomeActivity :
RESULT_ANSWERED_CODE -> { RESULT_ANSWERED_CODE -> {
//已接听,正常挂断 //已接听,正常挂断
//离开频道 //离开频道
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.AGORA, "咨询用户端:已接听,正常挂断 channelId:${mAudioMessageBean?.channelId}")
leaveChannel() leaveChannel()
} }
RESULT_NOT_ANSWERED_CODE -> { RESULT_NOT_ANSWERED_CODE -> {
...@@ -961,7 +974,7 @@ class ConsultantAudioHomeActivity : ...@@ -961,7 +974,7 @@ class ConsultantAudioHomeActivity :
} }
ActivityManager.getInstance().removeStack(activity = this) ActivityManager.getInstance().removeStack(activity = this)
LogUtil.e("[agora]页面移除") LogUtil.e("[agora]页面移除")
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.AGORA, "页面移除") AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.AGORA, "咨询用户端:页面移除 channelId:${mAudioMessageBean?.channelId}")
finish() finish()
} }
} }
...@@ -977,15 +990,17 @@ class ConsultantAudioHomeActivity : ...@@ -977,15 +990,17 @@ class ConsultantAudioHomeActivity :
* 停止播放 * 停止播放
*/ */
private fun stopPlaying() { private fun stopPlaying() {
if (mPlayer != null) { AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.AGORA, "咨询用户端:stopPlaying channelId:${mAudioMessageBean?.channelId}")
mPlayer!!.pause()
} mPlayer?.pause()
} }
/** /**
* 播放结束音频 * 播放结束音频
*/ */
private fun playFinishMusic() { private fun playFinishMusic() {
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.AGORA, "咨询用户端:playFinishMusic channelId:${mAudioMessageBean?.channelId}")
if (mPlayer == null) { if (mPlayer == null) {
mPlayer = AudioPlayer(this, true) mPlayer = AudioPlayer(this, true)
} }
...@@ -1012,6 +1027,8 @@ class ConsultantAudioHomeActivity : ...@@ -1012,6 +1027,8 @@ class ConsultantAudioHomeActivity :
1, 1,
"被叫加入频道后主叫未加入超时" "被叫加入频道后主叫未加入超时"
) )
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.AGORA, "咨询用户端:15s后如果还是处于连接中,则直接退出当前页面 channelId:${mAudioMessageBean?.channelId}")
writeAgoraLog("通话未接通挂断:连接中的状态超过5s自动挂断") writeAgoraLog("通话未接通挂断:连接中的状态超过5s自动挂断")
showToast("用户已挂断") showToast("用户已挂断")
close(RESULT_NOT_ANSWERED_CODE, "") close(RESULT_NOT_ANSWERED_CODE, "")
...@@ -1025,28 +1042,16 @@ class ConsultantAudioHomeActivity : ...@@ -1025,28 +1042,16 @@ class ConsultantAudioHomeActivity :
*/ */
private fun leaveChannel() { private fun leaveChannel() {
uploadException("", "zhu", "108") uploadException("", "zhu", "108")
if (totalDisposable != null) { totalDisposable?.dispose()
totalDisposable!!.dispose() connectingStatusDisposable?.dispose()
} voiceManage?.getVoiceApi()?.leaveChannel()
voiceManage?.getVoiceApi()?.destroy()
if (connectingStatusDisposable != null) { voiceManage = null
connectingStatusDisposable!!.dispose() mPlayer?.clear()
} sensorManager?.unregisterListener(this)
if (null != voiceManage && null != voiceManage!!.getVoiceApi()) {
voiceManage!!.getVoiceApi().leaveChannel()
voiceManage!!.getVoiceApi().destroy()
voiceManage = null
}
if (mPlayer != null) {
mPlayer!!.clear()
}
if (null != sensorManager) {
sensorManager!!.unregisterListener(this)
}
//唤醒设备 //唤醒设备
if (null != localWakeLock && localWakeLock!!.isHeld) { if (localWakeLock?.isHeld == true) {
localWakeLock!!.release() localWakeLock?.release()
} }
sensorManager = null sensorManager = null
localWakeLock = null localWakeLock = null
...@@ -1054,9 +1059,7 @@ class ConsultantAudioHomeActivity : ...@@ -1054,9 +1059,7 @@ class ConsultantAudioHomeActivity :
} }
private fun voiceDestory() { private fun voiceDestory() {
if (null != voiceManage && null != voiceManage!!.getVoiceApi()) { voiceManage?.getVoiceApi()?.destroy()
voiceManage!!.getVoiceApi().destroy()
}
voiceManage = null voiceManage = null
} }
...@@ -1108,6 +1111,8 @@ class ConsultantAudioHomeActivity : ...@@ -1108,6 +1111,8 @@ class ConsultantAudioHomeActivity :
override fun onDestroy() { override fun onDestroy() {
LogUtil.e("http-------------onDestory") LogUtil.e("http-------------onDestory")
AliYunRichLogsHelper.getInstance().sendRichLog(AliYunLogConfig.AGORA, "咨询用户端:onDestroy channelId:${mAudioMessageBean?.channelId}")
leaveChannel() leaveChannel()
voiceDestory() voiceDestory()
isConnectSuccess = false isConnectSuccess = false
...@@ -1123,6 +1128,7 @@ class ConsultantAudioHomeActivity : ...@@ -1123,6 +1128,7 @@ class ConsultantAudioHomeActivity :
} }
} }
super.onDestroy() super.onDestroy()
} }
......
...@@ -115,7 +115,6 @@ class ExpertConsultServiceListDialog2( ...@@ -115,7 +115,6 @@ class ExpertConsultServiceListDialog2(
} else { } else {
dialog_ll_empty.visibility=View.VISIBLE dialog_ll_empty.visibility=View.VISIBLE
ToastUtil.toastShort("咨询师暂未发布服务")
} }
}, Consumer { throwable: Throwable? -> }) }, Consumer { throwable: Throwable? -> })
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment