Commit 7967b66f by 严久程

声网日志

parent 83ff181a
...@@ -41,10 +41,6 @@ import com.ydl.webview.RefreshWebEvent ...@@ -41,10 +41,6 @@ import com.ydl.webview.RefreshWebEvent
import com.ydl.ydl_av.chat.bean.AudioMessageBean import com.ydl.ydl_av.chat.bean.AudioMessageBean
import com.ydl.ydl_av.messge_service.YDLRTMClient import com.ydl.ydl_av.messge_service.YDLRTMClient
import com.ydl.ydl_av.messge_service.callback.CancelCallStatusListener import com.ydl.ydl_av.messge_service.callback.CancelCallStatusListener
import com.ydl.ydl_av.messge_service.callback.CallListener
import com.ydl.ydl_av.messge_service.callback.CancelCallStatusListener
import com.ydl.ydl_av.messge_service.response.CallLocalResponse
import com.ydl.ydl_av.messge_service.response.CallRemoteResponse
import com.ydl.ydl_av.voice.listener.IYDLVoiceEventHandler import com.ydl.ydl_av.voice.listener.IYDLVoiceEventHandler
import com.ydl.ydl_av.voice.manager.YDLVoiceManager import com.ydl.ydl_av.voice.manager.YDLVoiceManager
import com.ydl.ydl_image.config.SimpleImageOpConfiger import com.ydl.ydl_image.config.SimpleImageOpConfiger
...@@ -60,6 +56,7 @@ import com.ydl.ydlcommon.utils.log.LogHelper ...@@ -60,6 +56,7 @@ import com.ydl.ydlcommon.utils.log.LogHelper
import com.ydl.ydlcommon.utils.remind.ToastHelper import com.ydl.ydlcommon.utils.remind.ToastHelper
import com.yidianling.user.api.service.IUserService import com.yidianling.user.api.service.IUserService
import de.greenrobot.event.EventBus import de.greenrobot.event.EventBus
import io.agora.rtc.Constants
import io.agora.rtc.IRtcEngineEventHandler import io.agora.rtc.IRtcEngineEventHandler
import io.reactivex.Observable import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
...@@ -194,6 +191,7 @@ class AudioHomeActivity : ...@@ -194,6 +191,7 @@ class AudioHomeActivity :
runOnUiThread { runOnUiThread {
when (warn) { when (warn) {
103, 104, 105, 106, 107 -> { 103, 104, 105, 106, 107 -> {
writeAgoraLog("通话挂断:网络异常(${warn})")
showToast("当前网络较差,请更换网络!") showToast("当前网络较差,请更换网络!")
//通话结束或挂断时,上传日志文件 //通话结束或挂断时,上传日志文件
uploadLog() uploadLog()
...@@ -263,6 +261,7 @@ class AudioHomeActivity : ...@@ -263,6 +261,7 @@ class AudioHomeActivity :
//更新:现在专家先加入频道,所以不会有等待的过程, //更新:现在专家先加入频道,所以不会有等待的过程,
runOnUiThread { runOnUiThread {
writeAgoraLog("主叫加入频道成功")
//自己加入频道成功 //自己加入频道成功
connectSuccess() connectSuccess()
} }
...@@ -275,6 +274,7 @@ class AudioHomeActivity : ...@@ -275,6 +274,7 @@ class AudioHomeActivity :
runOnUiThread { runOnUiThread {
//自己加入频道成功 //自己加入频道成功
if (!isConnectSuccess) { if (!isConnectSuccess) {
writeAgoraLog("主叫重新加入频道成功")
connectSuccess() connectSuccess()
} }
} }
...@@ -285,6 +285,7 @@ class AudioHomeActivity : ...@@ -285,6 +285,7 @@ class AudioHomeActivity :
super.onRtcStats(stats) super.onRtcStats(stats)
//因为用户端直接加入了频道,防止该回调执行时,专家还未加入频道,因此在连接成功之后,才进行频道人数判断 //因为用户端直接加入了频道,防止该回调执行时,专家还未加入频道,因此在连接成功之后,才进行频道人数判断
if (isConnectSuccess && null != stats?.users && stats.users == 1) { if (isConnectSuccess && null != stats?.users && stats.users == 1) {
writeAgoraLog("通话结束:用户加入了频道,但频道内只有一个人")
com.yidianling.common.tools.ToastUtil.toastShort("专家已挂断") com.yidianling.common.tools.ToastUtil.toastShort("专家已挂断")
//通话结束或挂断时,上传日志文件 //通话结束或挂断时,上传日志文件
uploadLog() uploadLog()
...@@ -296,6 +297,7 @@ class AudioHomeActivity : ...@@ -296,6 +297,7 @@ class AudioHomeActivity :
super.onConnectionStateChanged(state, reason) super.onConnectionStateChanged(state, reason)
// 3 网络连接被服务器中止 该情况现在是因为后端踢人逻辑 // 3 网络连接被服务器中止 该情况现在是因为后端踢人逻辑
if (reason == 3) { if (reason == 3) {
writeAgoraLog("通话结束:原因(${reason})")
com.yidianling.common.tools.ToastUtil.toastShort("专家已挂断") com.yidianling.common.tools.ToastUtil.toastShort("专家已挂断")
//通话结束或挂断时,上传日志文件 //通话结束或挂断时,上传日志文件
uploadLog() uploadLog()
...@@ -310,15 +312,6 @@ class AudioHomeActivity : ...@@ -310,15 +312,6 @@ class AudioHomeActivity :
uploadLog() uploadLog()
} }
override fun onLastmileQuality(quality: Int) {
super.onLastmileQuality(quality)
// LogUtil.e("[agora]网络质量报告回调${quality}")
}
override fun onConnectionInterrupted() {
super.onConnectionInterrupted()
LogUtil.e("[agora]连接中断回调")
}
override fun onUserJoined(uid: Int, elapsed: Int) { override fun onUserJoined(uid: Int, elapsed: Int) {
super.onUserJoined(uid, elapsed) super.onUserJoined(uid, elapsed)
...@@ -328,6 +321,7 @@ class AudioHomeActivity : ...@@ -328,6 +321,7 @@ class AudioHomeActivity :
override fun onUserOffline(uid: Int, elapsed: Int) { override fun onUserOffline(uid: Int, elapsed: Int) {
super.onUserOffline(uid, elapsed) super.onUserOffline(uid, elapsed)
LogUtil.e("[agora]远端用户$uid 离开频道回调") LogUtil.e("[agora]远端用户$uid 离开频道回调")
writeAgoraLog("接通后通话结束:对方已挂断")
//通话结束或挂断时,上传日志文件 //通话结束或挂断时,上传日志文件
uploadLog() uploadLog()
showToast("专家已挂断") showToast("专家已挂断")
...@@ -358,16 +352,19 @@ class AudioHomeActivity : ...@@ -358,16 +352,19 @@ class AudioHomeActivity :
initSensorManager() initSensorManager()
//页面传递数据初始化 //页面传递数据初始化
initIntentData() initIntentData()
if (YDLavManager.sdkStatus != Constants.CONNECTION_STATE_CONNECTED) {
//再次登录声网,确保声网登录状态
reLoginRTM()
}
//view初始化 //view初始化
initView() initView()
//设置信令的回调
setCallBack()
//点击事件 //点击事件
setClickEvent() setClickEvent()
//权限申请 //权限申请
requestPermission() requestPermission()
} }
private fun setWindowStatusBarColor() { private fun setWindowStatusBarColor() {
StatusBarUtils.setWindowStatusBarColor(this, R.color.audioim_color_40353535) StatusBarUtils.setWindowStatusBarColor(this, R.color.audioim_color_40353535)
} }
...@@ -397,14 +394,6 @@ class AudioHomeActivity : ...@@ -397,14 +394,6 @@ class AudioHomeActivity :
listenId = intent.getStringExtra(IntentConstants.INTENT_LISTEN_ID) listenId = intent.getStringExtra(IntentConstants.INTENT_LISTEN_ID)
commentUrl = intent.getStringExtra(IntentConstants.INTENT_COMMENT_URL) commentUrl = intent.getStringExtra(IntentConstants.INTENT_COMMENT_URL)
writeAgoraLog()
localRemainTime = remainTime?.toInt()
handler = Handler()
vibrator = getSystemService(Service.VIBRATOR_SERVICE) as Vibrator?
}
private fun writeAgoraLog() {
val logBean = AgoraLogInfoBean( val logBean = AgoraLogInfoBean(
expertHeadUrl, expertHeadUrl,
expertName, expertName,
...@@ -415,18 +404,25 @@ class AudioHomeActivity : ...@@ -415,18 +404,25 @@ class AudioHomeActivity :
callId, callId,
listenId listenId
) )
val content = Gson().toJson(logBean)
writeAgoraLog("主叫方发送的邀请通话消息内容:$content", isAppend = false)
Observable.create<Any> { localRemainTime = remainTime?.toInt()
try { handler = Handler()
val content = Gson().toJson(logBean) vibrator = getSystemService(Service.VIBRATOR_SERVICE) as Vibrator?
AudioLogUtils.writeAgoraLog(content,"confide") }
} catch (e: Exception) {
}
}.subscribeOn(Schedulers.io())
.subscribe()
private fun reLoginRTM() {
writeAgoraLog("RMT状态:${YDLavManager.sdkStatus},重新登录RMT")
val uid=YdlCommonRouterManager.getYdlCommonRoute().getUid().toString()
YDLavManager.instances.login(uid) { _isSuccess, _msg ->
writeAgoraLog("登录RTM的uid=${uid}")
val result = if (_isSuccess) "RMT登录成功" else "RMT登录失败:$_msg"
writeAgoraLog(result)
}
} }
private fun initView() { private fun initView() {
tv_change_route.isEnabled = false tv_change_route.isEnabled = false
//水波纹view初始化 //水波纹view初始化
...@@ -465,8 +461,8 @@ class AudioHomeActivity : ...@@ -465,8 +461,8 @@ class AudioHomeActivity :
return@setOnClickListener return@setOnClickListener
} }
if (isConnectSuccess) { if (isConnectSuccess) {
writeAgoraLog("已接通:主叫主动挂断")
updateExpertStatus(false, 1) updateExpertStatus(false, 1)
// userCloseCalling()
leaveChannel() leaveChannel()
uploadLog() uploadLog()
} else { } else {
...@@ -503,71 +499,6 @@ class AudioHomeActivity : ...@@ -503,71 +499,6 @@ class AudioHomeActivity :
} }
} }
private fun setCallBack() {
/**
* RTC 回调 在[YDLavManager.setCallback]中注册使用
*/
// //RTC 回调
// YDLRTMClient.instances.setCallListener(object : CallListener {
// override fun onCallRecivedByPeer(response: CallLocalResponse?) {
// playWaitingMusic()
// //返回给主叫:被叫已收到呼叫邀请
// LogUtil.i("[agora]${response?.calleeId}已收到呼叫邀请,频道号${response?.ChannelId}")
// }
//
// override fun onCallAccepted(response: CallLocalResponse?, msg: String?) {
// //返回给主叫
// LogUtil.i("[agora]${response?.calleeId}已接受呼叫邀请")
// //加入声网频道时机修改:用户收到专家接受邀请的回调后再加入声网频道
// joinChannel()
// }
//
// override fun onCallRefused(response: CallLocalResponse?, msg: String?) {
// //返回给主叫
// LogUtil.i("[agora]${response?.calleeId}已拒绝呼叫邀请")
// ToastUtil.showToast(applicationContext, "对方已挂断")
// //通话结束或挂断时,上传日志文件
// uploadLog()
// leaveChannel()
// }
//
// override fun onCallCanceled(response: CallLocalResponse?) {
// //返回给主叫
// LogUtil.i("[agora]主叫已取消呼叫邀请")
// }
//
// override fun onCallFailure(response: CallLocalResponse?, errorCode: Int) {
// //返回给主叫
// LogUtil.i("[agora]呼叫${response?.calleeId}用户失败:${response?.response}")
// //专家离线或者30 秒后仍未收到专家响应,重新再邀请一次
// when (errorCode) {
// //被叫不在线 呼叫邀请发出 30 秒后被叫仍未 ACK 响应呼叫邀请
// RtmStatusCode.LocalInvitationError.LOCAL_INVITATION_ERR_PEER_OFFLINE,
// RtmStatusCode.LocalInvitationError.LOCAL_INVITATION_ERR_PEER_NO_RESPONSE -> {
// rtcCall()
// }
// RtmStatusCode.LocalInvitationError.LOCAL_INVITATION_ERR_INVITATION_EXPIRE -> {//呼叫邀请过期。被叫 ACK 响应呼叫邀请后 60 秒呼叫邀请未被取消、接受、拒绝,则呼叫邀请过期。
//
// }
// }
// }
//
// override fun onMessageReceived(message: RTMMesssage?, member: ChannelMember?) {
// //接到频道消息
// LogUtil.i("[agora]接到${member?.channelId}频道${member?.userId}的消息:" + message?.text)
// }
//
// override fun onMemberJoined(member: ChannelMember?) {
// //新用户加入频道
// LogUtil.i("[agora]新用户加入${member?.channelId}频道:${member?.userId}")
// }
//
// override fun onMemberLeft(member: ChannelMember?) {
// LogUtil.i("[agora]有用户离开${member?.channelId}频道:${member?.userId}")
// }
// })
}
/** /**
* 请求权限 * 请求权限
*/ */
...@@ -613,22 +544,9 @@ class AudioHomeActivity : ...@@ -613,22 +544,9 @@ class AudioHomeActivity :
) )
sendDoctocrMsg = Gson().toJson(msgBean) sendDoctocrMsg = Gson().toJson(msgBean)
writeAgoraLog("主叫发送通话邀请")
rtcCall() rtcCall()
// Observable.interval(0, 100, TimeUnit.MILLISECONDS)
// .subscribeOn(Schedulers.computation())
// .take(303)
// .observeOn(AndroidSchedulers.mainThread())
// .subscribe({
// var result = it.toFloat() / 2.5f
// progress_view.setProgress(result)
// if (result >= 100f && !iv_hang_up.isEnabled) {
// //挂断按钮可点击
// iv_hang_up.isEnabled = true
// iv_hang_up.setImageResource(R.drawable.audioim_img_hang_up)
// }
// }, {}, {})
//开始60s等待倒计时 //开始60s等待倒计时
waitDisposable = Observable.interval(0, 100, TimeUnit.MILLISECONDS) waitDisposable = Observable.interval(0, 100, TimeUnit.MILLISECONDS)
...@@ -650,6 +568,7 @@ class AudioHomeActivity : ...@@ -650,6 +568,7 @@ class AudioHomeActivity :
if (!isConnectSuccess) { if (!isConnectSuccess) {
//关闭音乐 //关闭音乐
stopPlaying() stopPlaying()
writeAgoraLog("未接通挂断:60s等待倒计时结束挂断")
//提示切换传统线路 //提示切换传统线路
//发送消息通知专家用户已挂断 //发送消息通知专家用户已挂断
YDLRTMClient.instances.cancelCall(listenerUid, channelId,object :CancelCallStatusListener{ YDLRTMClient.instances.cancelCall(listenerUid, channelId,object :CancelCallStatusListener{
...@@ -693,6 +612,7 @@ class AudioHomeActivity : ...@@ -693,6 +612,7 @@ class AudioHomeActivity :
* 声网加入频道 * 声网加入频道
*/ */
fun joinChannel() { fun joinChannel() {
writeAgoraLog("对方接受了通话邀请,主叫开始加入频道:$channelId")
voiceManage!!.getVoiceApi().joinChannel( voiceManage!!.getVoiceApi().joinChannel(
token!!, token!!,
channelId!!, channelId!!,
...@@ -707,10 +627,11 @@ class AudioHomeActivity : ...@@ -707,10 +627,11 @@ class AudioHomeActivity :
* *
*/ */
private fun userCloseCalling() { private fun userCloseCalling() {
//发送消息通知专家用户已挂断 writeAgoraLog("未接听时:主叫主动挂断,取消呼叫")
//发送消息通知专家用户已挂断 //发送消息通知专家用户已挂断
YDLRTMClient.instances.cancelCall(listenerUid, channelId,object :CancelCallStatusListener{ YDLRTMClient.instances.cancelCall(listenerUid, channelId,object :CancelCallStatusListener{
override fun onFailure(errorMsg: String?, errorCode: Int) { override fun onFailure(errorMsg: String?, errorCode: Int) {
writeAgoraLog("未接听时:主叫主动挂断失败,msg=$errorMsg($errorCode),再次挂断")
YDLRTMClient.instances.cancelCall(listenerUid, channelId,null) YDLRTMClient.instances.cancelCall(listenerUid, channelId,null)
} }
...@@ -1170,6 +1091,14 @@ class AudioHomeActivity : ...@@ -1170,6 +1091,14 @@ class AudioHomeActivity :
} }
fun writeAgoraLog(content: String, isAppend: Boolean = true) {
try {
AudioLogUtils.writeAgoraLog(content, "confide", isAppend)
} catch (e: Exception) {
}
}
override fun finishActivity() { override fun finishActivity() {
leaveChannel() leaveChannel()
} }
......
...@@ -2,11 +2,13 @@ package com.ydl.audioim ...@@ -2,11 +2,13 @@ package com.ydl.audioim
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Context import android.content.Context
import android.os.Handler
import android.text.TextUtils import android.text.TextUtils
import com.alibaba.android.arouter.launcher.ARouter import com.alibaba.android.arouter.launcher.ARouter
import com.google.gson.Gson import com.google.gson.Gson
import com.ydl.audioim.http.AudioApiRequestUtil import com.ydl.audioim.http.AudioApiRequestUtil
import com.ydl.audioim.http.command.ConnectExceptionCommand import com.ydl.audioim.http.command.ConnectExceptionCommand
import com.ydl.audioim.utils.AudioLogUtils
import com.ydl.consultantim.ConsultantAudioHomeActivity import com.ydl.consultantim.ConsultantAudioHomeActivity
import com.ydl.ydl_av.chat.bean.AudioMessageBean import com.ydl.ydl_av.chat.bean.AudioMessageBean
import com.ydl.ydl_av.messge_service.YDLRTMClient import com.ydl.ydl_av.messge_service.YDLRTMClient
...@@ -38,6 +40,10 @@ class YDLavManager { ...@@ -38,6 +40,10 @@ class YDLavManager {
companion object { companion object {
val FILE_NAME="consult"
//当前sdk的登录状态
var sdkStatus = -1
val instances: YDLavManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) { val instances: YDLavManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
YDLavManager() YDLavManager()
} }
...@@ -49,6 +55,14 @@ class YDLavManager { ...@@ -49,6 +55,14 @@ class YDLavManager {
YDLRTMClient.instances.init(context, appId, listener) YDLRTMClient.instances.init(context, appId, listener)
//设置回调 //设置回调
setCallback() setCallback()
val uid= ModularServiceManager.provide(IUserService::class.java).getUserInfo()?.uid
if (!TextUtils.isEmpty(uid) && !TextUtils.equals("0", uid)) {
//不延时,可能会导致请求api报 network not unablibale
Handler().postDelayed({
login(uid)
}, 300)
}
} }
...@@ -88,6 +102,7 @@ class YDLavManager { ...@@ -88,6 +102,7 @@ class YDLavManager {
if (act is AudioHomeActivity) { if (act is AudioHomeActivity) {
act.runOnUiThread { act.runOnUiThread {
ToastUtil.toastShort("对方已挂断") ToastUtil.toastShort("对方已挂断")
act. writeAgoraLog("被叫拒绝了通话邀请")
//通话结束或挂断时,上传日志文件 //通话结束或挂断时,上传日志文件
act.uploadLog() act.uploadLog()
act.leaveChannel() act.leaveChannel()
...@@ -100,17 +115,23 @@ class YDLavManager { ...@@ -100,17 +115,23 @@ class YDLavManager {
override fun onCallCanceled(response: CallLocalResponse?) { override fun onCallCanceled(response: CallLocalResponse?) {
//返回给主叫 //返回给主叫
LogUtil.e("[agora]主叫已取消呼叫邀请") LogUtil.e("[agora]主叫已取消呼叫邀请")
val act = ActivityManager.getInstance().getTopTaskActivity()
if (act is AudioHomeActivity) {
act.runOnUiThread {
act.writeAgoraLog("主叫呼叫取消:超时或主动取消")
}
}
} }
override fun onCallFailure(response: CallLocalResponse?, errorCode: Int) { override fun onCallFailure(response: CallLocalResponse?, errorCode: Int) {
//返回给主叫 //返回给主叫
LogUtil.e("[agora]呼叫${response?.calleeId}用户失败:${response?.response}") LogUtil.e("[agora]呼叫${response?.calleeId}用户失败:${response?.response}")
val act = ActivityManager.getInstance().getTopTaskActivity()
//专家离线或者30 秒后仍未收到专家响应,重新再邀请一次 //专家离线或者30 秒后仍未收到专家响应,重新再邀请一次
when (errorCode) { when (errorCode) {
//被叫不在线 呼叫邀请发出 30 秒后被叫仍未 ACK 响应呼叫邀请 //被叫不在线 呼叫邀请发出 30 秒后被叫仍未 ACK 响应呼叫邀请
RtmStatusCode.LocalInvitationError.LOCAL_INVITATION_ERR_PEER_OFFLINE, RtmStatusCode.LocalInvitationError.LOCAL_INVITATION_ERR_PEER_OFFLINE,
RtmStatusCode.LocalInvitationError.LOCAL_INVITATION_ERR_PEER_NO_RESPONSE -> { RtmStatusCode.LocalInvitationError.LOCAL_INVITATION_ERR_PEER_NO_RESPONSE -> {
val act = ActivityManager.getInstance().getTopTaskActivity()
if (act is AudioHomeActivity) { if (act is AudioHomeActivity) {
act.runOnUiThread { act.runOnUiThread {
act.rtcCall() act.rtcCall()
...@@ -118,7 +139,14 @@ class YDLavManager { ...@@ -118,7 +139,14 @@ class YDLavManager {
} }
} }
RtmStatusCode.LocalInvitationError.LOCAL_INVITATION_ERR_INVITATION_EXPIRE -> {//呼叫邀请过期。被叫 ACK 响应呼叫邀请后 60 秒呼叫邀请未被取消、接受、拒绝,则呼叫邀请过期。 RtmStatusCode.LocalInvitationError.LOCAL_INVITATION_ERR_INVITATION_EXPIRE -> {//呼叫邀请过期。被叫 ACK 响应呼叫邀请后 60 秒呼叫邀请未被取消、接受、拒绝,则呼叫邀请过期。
if (act is AudioHomeActivity) {
act.runOnUiThread {
act. writeAgoraLog("呼叫失败:${errorCode}")
//通话结束或挂断时,上传日志文件
act.uploadLog()
act.leaveChannel()
}
}
} }
} }
} }
...@@ -126,7 +154,7 @@ class YDLavManager { ...@@ -126,7 +154,7 @@ class YDLavManager {
override fun onRemoteInvitationReceived(response: CallRemoteResponse?) { override fun onRemoteInvitationReceived(response: CallRemoteResponse?) {
//返回给被叫 //返回给被叫
LogUtil.e("[agora]收到来自${response?.callerId}的呼叫邀请") LogUtil.e("[agora]收到来自${response?.callerId}的呼叫邀请")
receivedCall(response?.content) receivedCall(response?.content, "来自RTM")
} }
override fun onRemoteInvitationAccepted(response: CallRemoteResponse?) { override fun onRemoteInvitationAccepted(response: CallRemoteResponse?) {
...@@ -142,12 +170,18 @@ class YDLavManager { ...@@ -142,12 +170,18 @@ class YDLavManager {
override fun onRemoteInvitationCanceled(response: CallRemoteResponse?) { override fun onRemoteInvitationCanceled(response: CallRemoteResponse?) {
//返回给被叫 //返回给被叫
LogUtil.e("[agora]主叫${response?.callerId}已取消呼叫邀请") LogUtil.e("[agora]主叫${response?.callerId}已取消呼叫邀请")
AudioLogUtils.writeAgoraLog("呼叫邀请被取消:主叫主动取消",FILE_NAME)
closePage() closePage()
} }
override fun onRemoteInvitationFailure(response: CallRemoteResponse?, errorCode: Int) { override fun onRemoteInvitationFailure(response: CallRemoteResponse?, errorCode: Int) {
//返回给被叫 //返回给被叫
LogUtil.e("[agora]来自主叫${response?.callerId}的呼叫邀请进程失败:${response?.response}") LogUtil.e("[agora]来自主叫${response?.callerId}的呼叫邀请进程失败:${response?.response}")
if (errorCode == RtmStatusCode.RemoteInvitationError.REMOTE_INVITATION_ERR_INVITATION_EXPIRE) {//呼叫邀请过期
AudioLogUtils.writeAgoraLog("呼叫邀请被取消:呼叫邀请过期",FILE_NAME)
} else {
AudioLogUtils.writeAgoraLog("呼叫邀请被取消:错误原因(${errorCode})",FILE_NAME)
}
//关闭页面 //关闭页面
closePage() closePage()
} }
...@@ -158,8 +192,16 @@ class YDLavManager { ...@@ -158,8 +192,16 @@ class YDLavManager {
}) })
} }
@SuppressLint("CheckResult")
fun login(userId: String?) { fun login(userId: String?) {
login(userId) { _, _ ->
}
}
@SuppressLint("CheckResult")
fun login(userId: String?, event: (isSuccess: Boolean, msg: String?) -> Unit) {
if (TextUtils.isEmpty(userId) || userId ?: "0" <= "0") { if (TextUtils.isEmpty(userId) || userId ?: "0" <= "0") {
//如果uid为空或小于等于0 ,则不进行登录,因为uid为0也会登录成功,会导致后面uid正确时无法登录 //如果uid为空或小于等于0 ,则不进行登录,因为uid为0也会登录成功,会导致后面uid正确时无法登录
LogUtil.e("[agora]login-uid:$userId") LogUtil.e("[agora]login-uid:$userId")
...@@ -177,10 +219,12 @@ class YDLavManager { ...@@ -177,10 +219,12 @@ class YDLavManager {
override fun onSuccess() { override fun onSuccess() {
//登陆成功,发起呼叫 //登陆成功,发起呼叫
LogUtil.e("[agora]实时消息登录成功") LogUtil.e("[agora]实时消息登录成功")
event(true, "")
} }
override fun onFailure(msg: String?) { override fun onFailure(msg: String?) {
LogUtil.e("[agora]实时消息登录失败:$msg") LogUtil.e("[agora]实时消息登录失败:$msg")
event(false, msg)
} }
}) })
...@@ -199,7 +243,7 @@ class YDLavManager { ...@@ -199,7 +243,7 @@ class YDLavManager {
* 收到邀请 * 收到邀请
*/ */
@SuppressLint("CheckResult") @SuppressLint("CheckResult")
fun receivedCall(content: String?) { fun receivedCall(content: String?, from: String = "") {
if (!TextUtils.isEmpty(content)) { if (!TextUtils.isEmpty(content)) {
//如果已经接听了用户电话 再有电话进来 是不能接听的 //如果已经接听了用户电话 再有电话进来 是不能接听的
if (!activityIsExists(ConsultantAudioHomeActivity::class.java) && !activityIsExists( if (!activityIsExists(ConsultantAudioHomeActivity::class.java) && !activityIsExists(
...@@ -215,14 +259,10 @@ class YDLavManager { ...@@ -215,14 +259,10 @@ class YDLavManager {
ARouter.getInstance().build("/av/ConsultantAudioHomeActivity") ARouter.getInstance().build("/av/ConsultantAudioHomeActivity")
.withString("param", content) .withString("param", content)
.navigation() .navigation()
AudioLogUtils.writeAgoraLog("收到主叫方通话邀请($from)", FILE_NAME, false)
} }
} else { } else {
try {
val mAudioMessageBean = Gson().fromJson(content, AudioMessageBean::class.java)
YDLRTMClient.instances.refuseCall(mAudioMessageBean.channelId)
} catch (e: Exception) {
}
LogUtil.d("[agora]收到声网邀请,但界面实例已存在") LogUtil.d("[agora]收到声网邀请,但界面实例已存在")
} }
} else { } else {
...@@ -303,6 +343,7 @@ class YDLavManager { ...@@ -303,6 +343,7 @@ class YDLavManager {
} }
override fun onConnectionStateChanged(state: Int, reason: Int) { override fun onConnectionStateChanged(state: Int, reason: Int) {
sdkStatus = state
LogUtil.i("[agora]onConnectionStateChanged:state:${state} -->reason:$reason") LogUtil.i("[agora]onConnectionStateChanged:state:${state} -->reason:$reason")
} }
......
...@@ -52,6 +52,7 @@ import com.ydl.ydlcommon.utils.remind.ToastHelper ...@@ -52,6 +52,7 @@ import com.ydl.ydlcommon.utils.remind.ToastHelper
import com.yidianling.common.tools.ToastUtil import com.yidianling.common.tools.ToastUtil
import com.yidianling.user.api.service.IUserService import com.yidianling.user.api.service.IUserService
import de.greenrobot.event.EventBus import de.greenrobot.event.EventBus
import io.agora.rtc.Constants
import io.agora.rtc.IRtcEngineEventHandler import io.agora.rtc.IRtcEngineEventHandler
import io.reactivex.Observable import io.reactivex.Observable
import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.android.schedulers.AndroidSchedulers
...@@ -128,9 +129,12 @@ class ConsultantAudioHomeActivity : ...@@ -128,9 +129,12 @@ class ConsultantAudioHomeActivity :
override fun onJoinChannelSuccess(channel: String?, uid: Int, elapsed: Int) { override fun onJoinChannelSuccess(channel: String?, uid: Int, elapsed: Int) {
super.onJoinChannelSuccess(channel, uid, elapsed) super.onJoinChannelSuccess(channel, uid, elapsed)
LogUtil.e("[agora]$uid 加入频道回调") LogUtil.e("[agora]$uid 加入频道回调")
// 加入频道后再通知用户已接受 writeAgoraLog("被叫加入声网($channel)频道成功")
YDLRTMClient.instances.acceptCall(mAudioMessageBean?.channelId)
runOnUiThread { runOnUiThread {
// 加入频道后再通知用户已接受
YDLRTMClient.instances.acceptCall(mAudioMessageBean?.channelId)
tv_toast.visibility = View.VISIBLE tv_toast.visibility = View.VISIBLE
tv_toast.text = "连接中..." tv_toast.text = "连接中..."
...@@ -143,9 +147,32 @@ class ConsultantAudioHomeActivity : ...@@ -143,9 +147,32 @@ class ConsultantAudioHomeActivity :
} }
} }
/**
* 重新加入频道回调
*/
override fun onRejoinChannelSuccess(channel: String?, uid: Int, elapsed: Int) {
super.onRejoinChannelSuccess(channel, uid, elapsed)
LogUtil.e("[agora]$uid 重新加入频道回调")
writeAgoraLog("被叫重新加入声网频道($channel)成功")
runOnUiThread {
if (!isConnectSuccess) {
tv_toast.visibility = View.VISIBLE
tv_toast.text = "连接中..."
voiceManage!!.getVoiceApi().setEnableSpeakerphone(false)
//5s倒计时,5s后还是连接中,则直接关闭页面
connectingStatusWaitingTimeCount()
}
}
}
override fun onUserJoined(uid: Int, elapsed: Int) { override fun onUserJoined(uid: Int, elapsed: Int) {
super.onUserJoined(uid, elapsed) super.onUserJoined(uid, elapsed)
LogUtil.e("[agora]远端用户加入频道回调") LogUtil.e("[agora]远端用户加入频道回调")
writeAgoraLog("主叫加入声网频道成功")
//另一方加入频道成功 //另一方加入频道成功
runOnUiThread { runOnUiThread {
isConnectSuccess = true isConnectSuccess = true
...@@ -166,6 +193,7 @@ class ConsultantAudioHomeActivity : ...@@ -166,6 +193,7 @@ class ConsultantAudioHomeActivity :
// 3 网络连接被服务器中止 该情况现在是因为后端踢人逻辑 // 3 网络连接被服务器中止 该情况现在是因为后端踢人逻辑
if (reason == 3) { if (reason == 3) {
ToastUtil.toastShort("对方已挂断") ToastUtil.toastShort("对方已挂断")
writeAgoraLog("通话挂断:网络连接被服务器中止")
//通话结束或挂断时,上传日志文件 //通话结束或挂断时,上传日志文件
uploadLog() uploadLog()
leaveChannel() leaveChannel()
...@@ -203,6 +231,7 @@ class ConsultantAudioHomeActivity : ...@@ -203,6 +231,7 @@ class ConsultantAudioHomeActivity :
LogUtil.e("[agora]$uid 主播离开频道回调") LogUtil.e("[agora]$uid 主播离开频道回调")
runOnUiThread { runOnUiThread {
showLongToast("对方已挂断") showLongToast("对方已挂断")
writeAgoraLog("通话接通后挂断:主叫离开频道")
//通话结束或挂断时,上传日志文件 //通话结束或挂断时,上传日志文件
uploadLog() uploadLog()
if (null != totalDisposable) { if (null != totalDisposable) {
...@@ -214,27 +243,6 @@ class ConsultantAudioHomeActivity : ...@@ -214,27 +243,6 @@ class ConsultantAudioHomeActivity :
} }
/** /**
* 重新加入频道回调
*/
override fun onRejoinChannelSuccess(channel: String?, uid: Int, elapsed: Int) {
super.onRejoinChannelSuccess(channel, uid, elapsed)
LogUtil.e("[agora]$uid 重新加入频道回调")
runOnUiThread {
if (!isConnectSuccess) {
tv_toast.visibility = View.VISIBLE
tv_toast.text = "连接中..."
voiceManage!!.getVoiceApi().setEnableSpeakerphone(false)
//5s倒计时,5s后还是连接中,则直接关闭页面
connectingStatusWaitingTimeCount()
}
}
}
/**
* 网络质量报告回调 * 网络质量报告回调
* 报告本地用户的网络质量。当你调用 enableLastmileTest 之后,该回调函数每 2 秒触发一次 * 报告本地用户的网络质量。当你调用 enableLastmileTest 之后,该回调函数每 2 秒触发一次
*/ */
...@@ -257,6 +265,7 @@ class ConsultantAudioHomeActivity : ...@@ -257,6 +265,7 @@ class ConsultantAudioHomeActivity :
runOnUiThread { runOnUiThread {
when (warn) { when (warn) {
103, 104, 105, 106, 107 -> { 103, 104, 105, 106, 107 -> {
writeAgoraLog("通话挂断:网络异常($warn)")
showLongToast("当前网络较差,请更换网络!") showLongToast("当前网络较差,请更换网络!")
//通话结束或挂断时,上传日志文件 //通话结束或挂断时,上传日志文件
uploadLog() uploadLog()
...@@ -339,8 +348,6 @@ class ConsultantAudioHomeActivity : ...@@ -339,8 +348,6 @@ class ConsultantAudioHomeActivity :
ConsultantAudioUtils.wakeUpAndUnlock(this) ConsultantAudioUtils.wakeUpAndUnlock(this)
//页面传递数据初始化 //页面传递数据初始化
getParam() getParam()
//设置信令的回调
setCallback()
//初始化传感器 //初始化传感器
initSensorManager() initSensorManager()
initUser() initUser()
...@@ -362,10 +369,20 @@ class ConsultantAudioHomeActivity : ...@@ -362,10 +369,20 @@ class ConsultantAudioHomeActivity :
if (null != intent.getStringExtra(PARAM)) { if (null != intent.getStringExtra(PARAM)) {
val json = intent.getStringExtra(PARAM) val json = intent.getStringExtra(PARAM)
if (!TextUtils.isEmpty(json)) { if (!TextUtils.isEmpty(json)) {
writeAgoraLog(json) writeAgoraLog("收到邀请通话消息内容:$json")
mAudioMessageBean = Gson().fromJson(json, AudioMessageBean::class.java) mAudioMessageBean = Gson().fromJson(json, AudioMessageBean::class.java)
YDLavManager.instances.login(ModularServiceManager.provide(IUserService::class.java).getUserInfo()?.uid)
if (YDLavManager.sdkStatus != Constants.CONNECTION_STATE_CONNECTED) {
writeAgoraLog("RMT状态:${YDLavManager.sdkStatus},重新登录RMT")
val uid =
ModularServiceManager.provide(IUserService::class.java).getUserInfo()?.uid
YDLavManager.instances.login(uid) { _isSuccess, _msg ->
writeAgoraLog("登录RTM的uid=${uid}")
val result = if (_isSuccess) "RMT登录成功" else "RMT登录失败:$_msg"
writeAgoraLog(result)
}
}
} }
} else { } else {
close(RESULT_NOT_ANSWERED_CODE, "通话异常") close(RESULT_NOT_ANSWERED_CODE, "通话异常")
...@@ -373,69 +390,6 @@ class ConsultantAudioHomeActivity : ...@@ -373,69 +390,6 @@ class ConsultantAudioHomeActivity :
} }
} }
private fun setCallback() {
/**
* RTC 回调 在[YDLavManager.setCallback]中注册使用
*/
// YDLRTMClient.instances.setCallListener(object : CallListener {
// override fun onCallRecivedByPeer(response: CallLocalResponse?) {
// //返回给主叫:被叫已收到呼叫邀请
// LogUtil.I("[agora]${response?.calleeId}已收到呼叫邀请,频道号${response?.ChannelId}")
// }
//
// override fun onCallAccepted(response: CallLocalResponse?, msg: String?) {
// //返回给主叫
// LogUtil.I("[agora]${response?.calleeId}已接受呼叫邀请")
// }
//
// override fun onCallRefused(response: CallLocalResponse?, msg: String?) {
// //返回给主叫
// LogUtil.I("[agora]${response?.calleeId}已拒绝呼叫邀请")
// }
//
// override fun onCallCanceled(response: CallLocalResponse?) {
// //返回给主叫
// LogUtil.I("[agora]主叫已取消呼叫邀请")
// }
//
// override fun onCallFailure(response: CallLocalResponse?, errorCode: Int) {
// //返回给主叫
// LogUtil.I("[agora]呼叫${response?.calleeId}用户失败:${response?.response}")
//
// }
//
// override fun onRemoteInvitationReceived(response: CallRemoteResponse?) {
// //返回给被叫
// LogUtil.I("[agora]收到来自${response?.callerId}的呼叫邀请")
// }
//
// override fun onRemoteInvitationAccepted(response: CallRemoteResponse?) {
// //返回给被叫
// LogUtil.I("[agora]接受来自${response?.callerId}的呼叫成功")
// }
//
// override fun onRemoteInvitationRefused(response: CallRemoteResponse?) {
// //返回给被叫
// LogUtil.I("[agora]已拒绝来自${response?.callerId}的呼叫")
// }
//
// override fun onRemoteInvitationCanceled(response: CallRemoteResponse?) {
// //返回给被叫
// LogUtil.I("[agora]主叫${response?.callerId}已取消呼叫邀请")
// }
//
// override fun onRemoteInvitationFailure(response: CallRemoteResponse?, errorCode: Int) {
// //返回给被叫
// LogUtil.I("[agora]来自主叫${response?.callerId}的呼叫邀请进程失败:${response?.response}")
// }
//
// override fun onOtherMsg(error: String?) {
// LogUtil.I("[agora]其它消息:${error}")
// }
// })
}
@SuppressLint("InvalidWakeLockTag") @SuppressLint("InvalidWakeLockTag")
private fun initSensorManager() { private fun initSensorManager() {
sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager? sensorManager = getSystemService(Context.SENSOR_SERVICE) as SensorManager?
...@@ -493,6 +447,7 @@ class ConsultantAudioHomeActivity : ...@@ -493,6 +447,7 @@ class ConsultantAudioHomeActivity :
* //获取声网频道号 * //获取声网频道号
*/ */
private fun getChannelToken() { private fun getChannelToken() {
writeAgoraLog("获取声网token")
//获取频道token //获取频道token
mPresenter.getChannelToken(mAudioMessageBean, false) mPresenter.getChannelToken(mAudioMessageBean, false)
} }
...@@ -506,6 +461,7 @@ class ConsultantAudioHomeActivity : ...@@ -506,6 +461,7 @@ class ConsultantAudioHomeActivity :
return return
} }
this.channelToken = token this.channelToken = token
writeAgoraLog("返回的声网token=$channelToken")
if (needJoinChannel) { if (needJoinChannel) {
//权限申请 //权限申请
requestPermission() requestPermission()
...@@ -622,11 +578,13 @@ class ConsultantAudioHomeActivity : ...@@ -622,11 +578,13 @@ class ConsultantAudioHomeActivity :
private fun showStopService() { private fun showStopService() {
if (status == STATUS_NOT_ANSWERED) { if (status == STATUS_NOT_ANSWERED) {
writeAgoraLog("通话未接通挂断:主动挂断")
//通话结束或挂断时,上传日志文件 //通话结束或挂断时,上传日志文件
uploadLog() uploadLog()
//当未接听 直接挂断 要发送给老师一条消息 //当未接听 直接挂断 要发送给老师一条消息
close(RESULT_NOT_ANSWERED_CODE, "用户已挂断") close(RESULT_NOT_ANSWERED_CODE, "用户已挂断")
} else if (status == STATUS_ANSWERED) { } else if (status == STATUS_ANSWERED) {
writeAgoraLog("通话接通后挂断:专家主动挂断")
//正常接听 挂断电话 需要重置信令管理类状态 //正常接听 挂断电话 需要重置信令管理类状态
close(RESULT_ANSWERED_CODE, "") close(RESULT_ANSWERED_CODE, "")
} }
...@@ -842,6 +800,7 @@ class ConsultantAudioHomeActivity : ...@@ -842,6 +800,7 @@ class ConsultantAudioHomeActivity :
.observeOn(AndroidSchedulers.mainThread()) .observeOn(AndroidSchedulers.mainThread())
.subscribe({}, {}, { .subscribe({}, {}, {
if (!isConnectSuccess) { if (!isConnectSuccess) {
writeAgoraLog("通话未接通挂断:连接中的状态超过5s自动挂断")
ToastUtil.toastShort(this, "用户已挂断") ToastUtil.toastShort(this, "用户已挂断")
close(RESULT_NOT_ANSWERED_CODE, "") close(RESULT_NOT_ANSWERED_CODE, "")
} }
......
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