package com.ydl.audioim import android.annotation.SuppressLint import android.content.Context import android.text.TextUtils import com.ydl.ydl_av.messge_service.YDLRTMClient import com.ydl.ydl_av.messge_service.bean.RTMMesssage import com.ydl.ydl_av.messge_service.callback.InitListener import com.ydl.ydl_av.messge_service.callback.LoginCallback import com.ydl.ydl_av.messge_service.request.LoginParam import com.ydl.audioim.http.AudioApiRequestUtil import com.ydl.ydlcommon.utils.LogUtil import com.ydl.ydlcommon.utils.log.LogHelper import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.schedulers.Schedulers /** * @author harvie * @date 2019/9/27 * 语音通话入口类 */ class YDLavManager { companion object{ val instances : YDLavManager by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED){ YDLavManager() } } private constructor() fun init(context: Context,appId:String){ YDLRTMClient.instances.init(context,appId,listener) } @SuppressLint("CheckResult") fun login(userId:String?){ if (TextUtils.isEmpty(userId) || userId?:"0" <= "0"){ //如果uid为空或小于等于0 ,则不进行登录,因为uid为0也会登录成功,会导致后面uid正确时无法登录 LogUtil.e("[agora]login-uid:$userId") return } //登录实时消息 //获取token AudioApiRequestUtil.getAgoraToken() .subscribeOn(Schedulers.io()) .observeOn(AndroidSchedulers.mainThread()) .subscribe({ if ("200".equals(it.code)){ YDLRTMClient.instances.login(LoginParam(userId,it.data.token),object : LoginCallback { override fun onSuccess() { //登陆成功,发起呼叫 LogUtil.d("[agora]实时消息登录成功") } override fun onFailure(msg: String?) { LogUtil.d("[agora]实时消息登录失败:$msg") } }) }else{ LogUtil.e("声网token获取失败uid:"+userId+" error:"+it.msg) LogHelper.getInstance().writeLogSync("声网token获取失败uid:"+userId+" error:"+it.msg) } },{ LogUtil.e("声网token获取异常uid:"+userId+" error:"+it.message) }) } /** * 退出登录 */ fun logout(){ YDLRTMClient.instances.logout(object : LoginCallback { override fun onSuccess() { //退出登陆成功 LogUtil.d("[agora]实时消息退出成功") } override fun onFailure(msg: String?) { LogUtil.d("[agora]实时消息退出失败:$msg") } }) } /** * 实时消息全局监听 */ private val listener = object :InitListener{ override fun onTokenExpired() { LogUtil.e("[agora]onTokenExpired") } override fun onMessageReceived(message: RTMMesssage, userId: Int) { LogUtil.i("[agora]onMessageReceived:${message.text} -->uid:$userId") } override fun onConnectionStateChanged(state: Int, reason: Int) { LogUtil.i("[agora]onConnectionStateChanged:state:${state} -->reason:$reason") } } }