|
|
@@ -14,19 +14,28 @@ import com.adealink.frame.media.MediaInfo
|
|
|
import com.adealink.frame.network.ISocketNotify
|
|
|
import com.adealink.frame.router.Router
|
|
|
import com.adealink.frame.util.AppUtil
|
|
|
+import com.adealink.frame.util.runOnUiThread
|
|
|
import com.adealink.weparty.App
|
|
|
import com.adealink.weparty.call.R
|
|
|
import com.adealink.weparty.call.WenextUICallKitImpl
|
|
|
import com.adealink.weparty.call.constant.CALL_ERROR_CALL_FAIL_FOR_CALLING
|
|
|
import com.adealink.weparty.call.constant.CALL_ERROR_CALL_YOURSELF
|
|
|
+import com.adealink.weparty.call.constant.CALL_ERROR_IN_MATCH_MODE_FAIL
|
|
|
import com.adealink.weparty.call.constant.CALL_ERROR_MEDIA_CONFLICT_CANCEL
|
|
|
import com.adealink.weparty.call.constant.TAG_CALL_FLOW
|
|
|
+import com.adealink.weparty.call.constant.TAG_CALL_MATCH_MODE
|
|
|
+import com.adealink.weparty.call.data.CallEndStatsNotify
|
|
|
import com.adealink.weparty.call.data.CallReq
|
|
|
import com.adealink.weparty.call.data.CallUserData
|
|
|
+import com.adealink.weparty.call.data.SwitchCallModeAsk
|
|
|
+import com.adealink.weparty.call.data.SwitchCallModeResultNotify
|
|
|
+import com.adealink.weparty.call.data.SwitchResult
|
|
|
import com.adealink.weparty.call.data.UserAuditNotify
|
|
|
import com.adealink.weparty.call.data.UserCurrencyUpdateNotify
|
|
|
import com.adealink.weparty.call.datasource.local.CallLocalService
|
|
|
import com.adealink.weparty.call.datasource.remote.CallHttpService
|
|
|
+import com.adealink.weparty.call.match.CallMatchActivity
|
|
|
+import com.adealink.weparty.call.match.matchManager
|
|
|
import com.adealink.weparty.call.util.debugToast
|
|
|
import com.adealink.weparty.call.util.getRoomId
|
|
|
import com.adealink.weparty.commonui.toast.util.getFailedMsg
|
|
|
@@ -93,6 +102,72 @@ class CallManager : BaseFrame<ICallListener>(), ICallManager {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private val switchCallModeNotify = object : ISocketNotify<SwitchCallModeAsk> {
|
|
|
+ override val uri: String = "SWITCH_CALL_MODE_NOTIFY"
|
|
|
+
|
|
|
+ override fun onNotify(data: SwitchCallModeAsk) {
|
|
|
+ dispatch {
|
|
|
+ it.handleVideoInvitation(data)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun needHandle(data: SwitchCallModeAsk?): Boolean {
|
|
|
+ data ?: return false
|
|
|
+ val currentRoomId = TUICallState.instance.roomId.get()?.getRoomId() ?: return false
|
|
|
+ return data.roomId == currentRoomId
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private val switchCallModeResultNotify = object : ISocketNotify<SwitchCallModeResultNotify> {
|
|
|
+ override val uri: String = "SWITCH_CALL_MODE_RESULT_NOTIFY"
|
|
|
+
|
|
|
+ override fun onNotify(data: SwitchCallModeResultNotify) {
|
|
|
+ Log.d(TAG_CALL_MATCH_MODE, "SwitchCallModeResultNotify: $data")
|
|
|
+ when(data.switchResult) {
|
|
|
+ SwitchResult.SUCCESS.value -> {
|
|
|
+ TUICallState.instance.matchModeOpenCamera.set(true)
|
|
|
+ }
|
|
|
+ SwitchResult.TIMEOUT.value -> {
|
|
|
+ TUICallState.instance.matchModeOpenCamera.set(false)
|
|
|
+ showToast(getCompatString(R.string.call_change_video_timeout))
|
|
|
+ }
|
|
|
+ SwitchResult.REFUSE.value -> {
|
|
|
+ TUICallState.instance.matchModeOpenCamera.set(false)
|
|
|
+ showToast(getCompatString(R.string.call_change_video_decline))
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun needHandle(data: SwitchCallModeResultNotify?): Boolean {
|
|
|
+ data ?: return false
|
|
|
+ val currentRoomId = TUICallState.instance.roomId.get()?.getRoomId() ?: return false
|
|
|
+ return data.roomId == currentRoomId
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ private val callEndStatsNotify = object : ISocketNotify<CallEndStatsNotify> {
|
|
|
+ override val uri: String = "CALL_END_STATS_NOTIFY"
|
|
|
+
|
|
|
+ override fun onNotify(data: CallEndStatsNotify) {
|
|
|
+ Log.d(TAG_CALL_MATCH_MODE, "CallEndStatsNotify: $data")
|
|
|
+ //直接弹窗
|
|
|
+ val activity = AppUtil.currentActivity ?: return
|
|
|
+ if (activity is CallMatchActivity) {
|
|
|
+ return
|
|
|
+ }
|
|
|
+ runOnUiThread {
|
|
|
+ Router.build(AppUtil.appContext, Call.CallSettlement.PATH)
|
|
|
+ .putExtra(Call.CallSettlement.EXTRA_DATA,data)
|
|
|
+ .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
|
|
+ .start()
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun needHandle(data: CallEndStatsNotify?): Boolean {
|
|
|
+ return data != null
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
private val userAuditNotify = object : ISocketNotify<UserAuditNotify> {
|
|
|
|
|
|
override val uri: String = "URI_CALL_1V1_AUDIT_NOTIFY"
|
|
|
@@ -146,7 +221,11 @@ class CallManager : BaseFrame<ICallListener>(), ICallManager {
|
|
|
TUICallDefine.Status.None,
|
|
|
TUICallDefine.Status.Waiting,
|
|
|
null -> {
|
|
|
- App.instance.hardwareManager.release(HardwareClientId.CALL_1V1.id, Hardware.CAMERA, Hardware.MIC)
|
|
|
+ App.instance.hardwareManager.release(
|
|
|
+ HardwareClientId.CALL_1V1.id,
|
|
|
+ Hardware.CAMERA,
|
|
|
+ Hardware.MIC
|
|
|
+ )
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -158,11 +237,20 @@ class CallManager : BaseFrame<ICallListener>(), ICallManager {
|
|
|
override fun onCallBegin() {
|
|
|
App.instance.networkService.subscribeNotify(userCurrencyUpdateNotify)
|
|
|
App.instance.networkService.subscribeNotify(userAuditNotify)
|
|
|
+ App.instance.networkService.subscribeNotify(switchCallModeNotify)
|
|
|
+ App.instance.networkService.subscribeNotify(switchCallModeResultNotify)
|
|
|
+ App.instance.networkService.subscribeNotify(callEndStatsNotify)
|
|
|
}
|
|
|
|
|
|
override fun onCallEnd() {
|
|
|
App.instance.networkService.unSubscribeNotify(userCurrencyUpdateNotify)
|
|
|
App.instance.networkService.unSubscribeNotify(userAuditNotify)
|
|
|
+ App.instance.networkService.unSubscribeNotify(switchCallModeNotify)
|
|
|
+ App.instance.networkService.unSubscribeNotify(switchCallModeResultNotify)
|
|
|
+ }
|
|
|
+
|
|
|
+ override fun clear() {
|
|
|
+ App.instance.networkService.unSubscribeNotify(callEndStatsNotify)
|
|
|
}
|
|
|
|
|
|
override fun getRoomId(): Long? {
|
|
|
@@ -171,13 +259,21 @@ class CallManager : BaseFrame<ICallListener>(), ICallManager {
|
|
|
|
|
|
/**
|
|
|
* -. 检查当前是否正在通话
|
|
|
+ * -. 检查是否处于匹配状态
|
|
|
* -. 检查当前通话信息
|
|
|
* -. 检查媒体冲突
|
|
|
* -. 检查/申请权限
|
|
|
* -. 业务侧发起通话
|
|
|
* -. 最后回调到EngineManager呼叫
|
|
|
*/
|
|
|
- override fun call(targetUid: Long, mediaType: TUICallDefine.MediaType, source: CallerSource?, callback: TUICommonDefine.Callback?, startFullScreenView: Boolean) {
|
|
|
+ override fun call(
|
|
|
+ targetUid: Long,
|
|
|
+ mediaType: TUICallDefine.MediaType,
|
|
|
+ source: CallerSource?,
|
|
|
+ callback: TUICommonDefine.Callback?,
|
|
|
+ startFullScreenView: Boolean,
|
|
|
+ matchId: Long?
|
|
|
+ ) {
|
|
|
launch {
|
|
|
val callActionCallback = object : TUICommonDefine.Callback {
|
|
|
override fun onSuccess() {
|
|
|
@@ -193,6 +289,8 @@ class CallManager : BaseFrame<ICallListener>(), ICallManager {
|
|
|
|
|
|
override fun onError(errCode: Int, errMsg: String?) {
|
|
|
callback?.onError(errCode, errMsg)
|
|
|
+ //呼叫失败,清除匹配数据
|
|
|
+ matchManager.clearData()
|
|
|
//处理媒体冲突不需要提示
|
|
|
if (errCode != CALL_ERROR_MEDIA_CONFLICT_CANCEL) {
|
|
|
if (errCode == ServerCode.CURRENCY_NOT_ENOUGH.code) {
|
|
|
@@ -202,7 +300,8 @@ class CallManager : BaseFrame<ICallListener>(), ICallManager {
|
|
|
showToast(
|
|
|
errMsg ?: getCompatString(
|
|
|
com.adealink.weparty.R.string.commonui_error_msg,
|
|
|
- errMsg ?: getCompatString(com.adealink.weparty.R.string.common_failed),
|
|
|
+ errMsg
|
|
|
+ ?: getCompatString(com.adealink.weparty.R.string.common_failed),
|
|
|
errCode
|
|
|
)
|
|
|
)
|
|
|
@@ -211,39 +310,59 @@ class CallManager : BaseFrame<ICallListener>(), ICallManager {
|
|
|
}
|
|
|
|
|
|
if (TUICallState.instance.selfUser.get().isCalling()) {
|
|
|
- callActionCallback.onError(CALL_ERROR_CALL_FAIL_FOR_CALLING, getCompatString(R.string.call_fail_for_calling_now))
|
|
|
+ callActionCallback.onError(
|
|
|
+ CALL_ERROR_CALL_FAIL_FOR_CALLING,
|
|
|
+ getCompatString(R.string.call_fail_for_calling_now)
|
|
|
+ )
|
|
|
return@launch
|
|
|
}
|
|
|
|
|
|
- if (targetUid == ProfileModule.getMyUid()) {
|
|
|
- //不能呼叫自己
|
|
|
- callActionCallback.onError(CALL_ERROR_CALL_YOURSELF, getCompatString(R.string.call_target_uid_is_self))
|
|
|
+ if (matchId == null && matchManager.isMatchIdValid()) {
|
|
|
+ callActionCallback.onError(
|
|
|
+ CALL_ERROR_IN_MATCH_MODE_FAIL,
|
|
|
+ getCompatString(R.string.call_fail_for_match_mode)
|
|
|
+ )
|
|
|
return@launch
|
|
|
}
|
|
|
|
|
|
- //房间媒体冲突处理失败,进房失败
|
|
|
- val mediaConflictRlt = App.instance.mediaManager.conflictHandle(
|
|
|
- MediaInfo(
|
|
|
- MediaType.CALL_1V1.type,
|
|
|
- if (mediaType == TUICallDefine.MediaType.Audio) {
|
|
|
- getCompatString(R.string.call_chat)
|
|
|
- } else {
|
|
|
- getCompatString(R.string.call_video)
|
|
|
- }
|
|
|
+ if (targetUid == ProfileModule.getMyUid()) {
|
|
|
+ //不能呼叫自己
|
|
|
+ callActionCallback.onError(
|
|
|
+ CALL_ERROR_CALL_YOURSELF,
|
|
|
+ getCompatString(R.string.call_target_uid_is_self)
|
|
|
)
|
|
|
- )
|
|
|
- if (mediaConflictRlt is Rlt.Failed) {
|
|
|
- Log.e(TAG_CALL_FLOW, "call fail, for media conflict fail")
|
|
|
- callActionCallback.onError(CALL_ERROR_MEDIA_CONFLICT_CANCEL, null)
|
|
|
return@launch
|
|
|
}
|
|
|
|
|
|
- //检查/申请权限
|
|
|
- val permissionRlt = requestPermission(true, mediaType)
|
|
|
- if (permissionRlt is Rlt.Failed) {
|
|
|
- Log.e(TAG_CALL_FLOW, "call fail, for permission denied")
|
|
|
- callActionCallback.onError(TUICallDefine.ERROR_PERMISSION_DENIED, getCompatString(R.string.call_permission_grant_fail))
|
|
|
- return@launch
|
|
|
+ //有matchId的时候,不需要再检查一下
|
|
|
+ if (matchId ==null){
|
|
|
+ //房间媒体冲突处理失败,进房失败
|
|
|
+ val mediaConflictRlt = App.instance.mediaManager.conflictHandle(
|
|
|
+ MediaInfo(
|
|
|
+ MediaType.CALL_1V1.type,
|
|
|
+ if (mediaType == TUICallDefine.MediaType.Audio) {
|
|
|
+ getCompatString(R.string.call_chat)
|
|
|
+ } else {
|
|
|
+ getCompatString(R.string.call_video)
|
|
|
+ }
|
|
|
+ )
|
|
|
+ )
|
|
|
+ if (mediaConflictRlt is Rlt.Failed) {
|
|
|
+ Log.e(TAG_CALL_FLOW, "call fail, for media conflict fail")
|
|
|
+ callActionCallback.onError(CALL_ERROR_MEDIA_CONFLICT_CANCEL, null)
|
|
|
+ return@launch
|
|
|
+ }
|
|
|
+
|
|
|
+ //检查/申请权限
|
|
|
+ val permissionRlt = requestPermission(true, mediaType)
|
|
|
+ if (permissionRlt is Rlt.Failed) {
|
|
|
+ Log.e(TAG_CALL_FLOW, "call fail, for permission denied")
|
|
|
+ callActionCallback.onError(
|
|
|
+ TUICallDefine.ERROR_PERMISSION_DENIED,
|
|
|
+ getCompatString(R.string.call_permission_grant_fail)
|
|
|
+ )
|
|
|
+ return@launch
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
val startCallRlt = startCall(
|
|
|
@@ -252,22 +371,34 @@ class CallManager : BaseFrame<ICallListener>(), ICallManager {
|
|
|
targetUid,
|
|
|
mediaType,
|
|
|
source == CallerSource.INVITE,
|
|
|
- null
|
|
|
+ null,
|
|
|
+ matchId
|
|
|
)
|
|
|
|
|
|
if (startCallRlt is Rlt.Failed) {
|
|
|
- callActionCallback.onError(startCallRlt.error.serverCode, getFailedMsg(startCallRlt.error))
|
|
|
+ callActionCallback.onError(
|
|
|
+ startCallRlt.error.serverCode,
|
|
|
+ getFailedMsg(startCallRlt.error)
|
|
|
+ )
|
|
|
return@launch
|
|
|
}
|
|
|
val callRoomId = (startCallRlt as Rlt.Success).data
|
|
|
if (callRoomId.isNullOrEmpty()) {
|
|
|
Log.e(TAG_CALL_FLOW, "call fail, for callRoomId is null")
|
|
|
- callActionCallback.onError(CALL_ERROR_START_CALL_SERVER_ERROR, getCompatString(R.string.call_start_call_fail_room_id_invalid))
|
|
|
+ callActionCallback.onError(
|
|
|
+ CALL_ERROR_START_CALL_SERVER_ERROR,
|
|
|
+ getCompatString(R.string.call_start_call_fail_room_id_invalid)
|
|
|
+ )
|
|
|
return@launch
|
|
|
}
|
|
|
|
|
|
- val callParams = createCallParams(source, callRoomId)
|
|
|
- EngineManager.instance.calls(listOf(targetUid.toString()), mediaType, callParams, callActionCallback)
|
|
|
+ val callParams = createCallParams(source, callRoomId, matchId)
|
|
|
+ EngineManager.instance.calls(
|
|
|
+ listOf(targetUid.toString()),
|
|
|
+ mediaType,
|
|
|
+ callParams,
|
|
|
+ callActionCallback
|
|
|
+ )
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -288,13 +419,14 @@ class CallManager : BaseFrame<ICallListener>(), ICallManager {
|
|
|
.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
|
|
.start()
|
|
|
}
|
|
|
- if (TUICallState.instance.mediaType.get() == TUICallDefine.MediaType.Video) {
|
|
|
+ if (TUICallState.instance.mediaType.get() == TUICallDefine.MediaType.Video && !matchManager.isMatchIdValid()) {
|
|
|
val videoView = VideoViewFactory.instance.createVideoView(
|
|
|
TUICallState.instance.selfUser.get(), AppUtil.appContext
|
|
|
)
|
|
|
-
|
|
|
EngineManager.instance.openCamera(
|
|
|
- TUICallState.instance.isFrontCamera.get(), videoView?.getVideoView(), null
|
|
|
+ TUICallState.instance.isFrontCamera.get(),
|
|
|
+ videoView?.getVideoView(),
|
|
|
+ null
|
|
|
)
|
|
|
}
|
|
|
callback?.onSuccess()
|
|
|
@@ -308,7 +440,8 @@ class CallManager : BaseFrame<ICallListener>(), ICallManager {
|
|
|
showToast(
|
|
|
errMsg ?: getCompatString(
|
|
|
com.adealink.weparty.R.string.commonui_error_msg,
|
|
|
- errMsg ?: getCompatString(com.adealink.weparty.R.string.common_failed),
|
|
|
+ errMsg
|
|
|
+ ?: getCompatString(com.adealink.weparty.R.string.common_failed),
|
|
|
errCode
|
|
|
)
|
|
|
)
|
|
|
@@ -321,7 +454,10 @@ class CallManager : BaseFrame<ICallListener>(), ICallManager {
|
|
|
val mediaType = TUICallState.instance.mediaType.get()
|
|
|
if (mediaType == null || mediaType == TUICallDefine.MediaType.Unknown) {
|
|
|
Log.e(TAG_CALL_FLOW, "accept fail, mediaType($mediaType) is invalid")
|
|
|
- acceptCallback.onError(TUICallDefine.ERROR_PARAM_INVALID, getCompatString(R.string.call_media_type_unknown))
|
|
|
+ acceptCallback.onError(
|
|
|
+ TUICallDefine.ERROR_PARAM_INVALID,
|
|
|
+ getCompatString(R.string.call_media_type_unknown)
|
|
|
+ )
|
|
|
return@launch
|
|
|
}
|
|
|
|
|
|
@@ -329,36 +465,48 @@ class CallManager : BaseFrame<ICallListener>(), ICallManager {
|
|
|
val selfUid = TUICallState.instance.getSelfUid()
|
|
|
val remoteUid = TUICallState.instance.getRemoteUid()
|
|
|
if ((selfUid == null || !selfUid.isUidValid()) || (remoteUid == null || !remoteUid.isUidValid())) {
|
|
|
- Log.e(TAG_CALL_FLOW, "accept fail, callerUid($selfUid)/calledUid($remoteUid) is invalid.")
|
|
|
- acceptCallback.onError(TUICallDefine.ERROR_PARAM_INVALID, getCompatString(R.string.call_target_uid_is_invalid))
|
|
|
+ Log.e(
|
|
|
+ TAG_CALL_FLOW,
|
|
|
+ "accept fail, callerUid($selfUid)/calledUid($remoteUid) is invalid."
|
|
|
+ )
|
|
|
+ acceptCallback.onError(
|
|
|
+ TUICallDefine.ERROR_PARAM_INVALID,
|
|
|
+ getCompatString(R.string.call_target_uid_is_invalid)
|
|
|
+ )
|
|
|
return@launch
|
|
|
}
|
|
|
val callerUid = if (isSelfCaller) selfUid else remoteUid
|
|
|
val calledUid = if (isSelfCaller) remoteUid else selfUid
|
|
|
val callUserData = TUICallState.instance.callUserData.get()
|
|
|
|
|
|
- //房间媒体冲突处理失败,进房失败
|
|
|
- val conflictRlt = App.instance.mediaManager.conflictHandle(
|
|
|
- MediaInfo(
|
|
|
- MediaType.CALL_1V1.type,
|
|
|
- if (mediaType == TUICallDefine.MediaType.Audio) {
|
|
|
- getCompatString(R.string.call_chat)
|
|
|
- } else {
|
|
|
- getCompatString(R.string.call_video)
|
|
|
- }
|
|
|
+ if (callUserData.matchId == null) {
|
|
|
+ //匹配模式下不检查
|
|
|
+ //房间媒体冲突处理失败,进房失败
|
|
|
+ val conflictRlt = App.instance.mediaManager.conflictHandle(
|
|
|
+ MediaInfo(
|
|
|
+ MediaType.CALL_1V1.type,
|
|
|
+ if (mediaType == TUICallDefine.MediaType.Audio) {
|
|
|
+ getCompatString(R.string.call_chat)
|
|
|
+ } else {
|
|
|
+ getCompatString(R.string.call_video)
|
|
|
+ }
|
|
|
+ )
|
|
|
)
|
|
|
- )
|
|
|
- if (conflictRlt is Rlt.Failed) {
|
|
|
- Log.e(TAG_CALL_FLOW, "accept fail, for media conflict fail")
|
|
|
- acceptCallback.onError(CALL_ERROR_MEDIA_CONFLICT_CANCEL, "")
|
|
|
- return@launch
|
|
|
+ if (conflictRlt is Rlt.Failed) {
|
|
|
+ Log.e(TAG_CALL_FLOW, "accept fail, for media conflict fail")
|
|
|
+ acceptCallback.onError(CALL_ERROR_MEDIA_CONFLICT_CANCEL, "")
|
|
|
+ return@launch
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
//检查/申请权限
|
|
|
val permissionRlt = requestPermission(false, mediaType)
|
|
|
if (permissionRlt is Rlt.Failed) {
|
|
|
Log.e(TAG_CALL_FLOW, "accept fail, permission denied")
|
|
|
- acceptCallback.onError(TUICallDefine.ERROR_PERMISSION_DENIED, getCompatString(R.string.call_permission_grant_fail))
|
|
|
+ acceptCallback.onError(
|
|
|
+ TUICallDefine.ERROR_PERMISSION_DENIED,
|
|
|
+ getCompatString(R.string.call_permission_grant_fail)
|
|
|
+ )
|
|
|
return@launch
|
|
|
}
|
|
|
|
|
|
@@ -369,7 +517,8 @@ class CallManager : BaseFrame<ICallListener>(), ICallManager {
|
|
|
calledUid,
|
|
|
mediaType,
|
|
|
callUserData.isInviteSource(),
|
|
|
- callUserData.callRoomId
|
|
|
+ callUserData.callRoomId,
|
|
|
+ callUserData.matchId
|
|
|
)
|
|
|
if (startCallRlt is Rlt.Failed) {
|
|
|
acceptCallback.onError(startCallRlt.error.serverCode, startCallRlt.error.msg)
|
|
|
@@ -396,7 +545,8 @@ class CallManager : BaseFrame<ICallListener>(), ICallManager {
|
|
|
override fun ignore(callback: TUICommonDefine.Callback?) {
|
|
|
launch {
|
|
|
TUICallState.instance.clear()
|
|
|
- WenextUICallKitImpl.createInstance(AppUtil.appContext).getCallingBellFeature()?.stopAndClear()
|
|
|
+ WenextUICallKitImpl.createInstance(AppUtil.appContext).getCallingBellFeature()
|
|
|
+ ?.stopAndClear()
|
|
|
callback?.onSuccess()
|
|
|
}
|
|
|
}
|
|
|
@@ -407,43 +557,54 @@ class CallManager : BaseFrame<ICallListener>(), ICallManager {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- override suspend fun requestPermission(isCaller: Boolean, mediaType: TUICallDefine.MediaType): Rlt<Any> {
|
|
|
+ override suspend fun requestPermission(
|
|
|
+ isCaller: Boolean,
|
|
|
+ mediaType: TUICallDefine.MediaType
|
|
|
+ ): Rlt<Any> {
|
|
|
return withContext(Dispatcher.UI) {
|
|
|
suspendCancellableCoroutine { continuation ->
|
|
|
- PermissionRequest.requestPermissions(AppUtil.appContext, mediaType, object : PermissionCallback() {
|
|
|
- override fun onGranted() {
|
|
|
- //主叫直接返回结果
|
|
|
- if (isCaller) {
|
|
|
- if (continuation.isActive) {
|
|
|
- continuation.resume(Rlt.Success(Any()), null)
|
|
|
+ PermissionRequest.requestPermissions(
|
|
|
+ AppUtil.appContext,
|
|
|
+ mediaType,
|
|
|
+ object : PermissionCallback() {
|
|
|
+ override fun onGranted() {
|
|
|
+ //主叫直接返回结果
|
|
|
+ if (isCaller) {
|
|
|
+ if (continuation.isActive) {
|
|
|
+ continuation.resume(Rlt.Success(Any()), null)
|
|
|
+ }
|
|
|
+ return
|
|
|
+ }
|
|
|
+ //被叫需要检查当前呼叫状态
|
|
|
+ if (TUICallState.instance.selfUser.get().callStatus.get() == TUICallDefine.Status.None) {
|
|
|
+ if (continuation.isActive) {
|
|
|
+ continuation.resume(Rlt.Failed(IError()), null)
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if (continuation.isActive) {
|
|
|
+ continuation.resume(Rlt.Success(Any()), null)
|
|
|
+ }
|
|
|
}
|
|
|
- return
|
|
|
}
|
|
|
- //被叫需要检查当前呼叫状态
|
|
|
- if (TUICallState.instance.selfUser.get().callStatus.get() == TUICallDefine.Status.None) {
|
|
|
+
|
|
|
+ override fun onDenied() {
|
|
|
if (continuation.isActive) {
|
|
|
continuation.resume(Rlt.Failed(IError()), null)
|
|
|
}
|
|
|
- } else {
|
|
|
- if (continuation.isActive) {
|
|
|
- continuation.resume(Rlt.Success(Any()), null)
|
|
|
- }
|
|
|
}
|
|
|
- }
|
|
|
-
|
|
|
- override fun onDenied() {
|
|
|
- if (continuation.isActive) {
|
|
|
- continuation.resume(Rlt.Failed(IError()), null)
|
|
|
- }
|
|
|
- }
|
|
|
- })
|
|
|
+ })
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private suspend fun startCall(
|
|
|
isCaller: Boolean,
|
|
|
- callerUid: Long, calledUid: Long, mediaType: TUICallDefine.MediaType, isInvite: Boolean, callRoomId: String?
|
|
|
+ callerUid: Long,
|
|
|
+ calledUid: Long,
|
|
|
+ mediaType: TUICallDefine.MediaType,
|
|
|
+ isInvite: Boolean,
|
|
|
+ callRoomId: String?,
|
|
|
+ matchId: Long?
|
|
|
): Rlt<String?> {
|
|
|
val startCallRlt = callHttpService.startCall(
|
|
|
CallReq(
|
|
|
@@ -451,7 +612,8 @@ class CallManager : BaseFrame<ICallListener>(), ICallManager {
|
|
|
calledUid,
|
|
|
mediaType.value,
|
|
|
isInvite,
|
|
|
- callRoomId
|
|
|
+ callRoomId,
|
|
|
+ matchId
|
|
|
)
|
|
|
)
|
|
|
when (startCallRlt) {
|
|
|
@@ -480,7 +642,8 @@ class CallManager : BaseFrame<ICallListener>(), ICallManager {
|
|
|
|
|
|
private suspend fun createCallParams(
|
|
|
source: CallerSource?,
|
|
|
- callRoomId: String
|
|
|
+ callRoomId: String,
|
|
|
+ matchId: Long?,
|
|
|
): CallParams {
|
|
|
return withContext(this.coroutineContext) {
|
|
|
val callParams = CallParams()
|
|
|
@@ -488,10 +651,13 @@ class CallManager : BaseFrame<ICallListener>(), ICallManager {
|
|
|
callParams.timeout = SettingsConfig.callTimeOut
|
|
|
//用户数据( 房间ID,通话来源(计费) )
|
|
|
callParams.userData = toJsonErrorNull(
|
|
|
- CallUserData(callRoomId, source?.source ?: CallerSource.CALLER.source)
|
|
|
+ CallUserData(callRoomId, source?.source ?: CallerSource.CALLER.source, matchId)
|
|
|
)
|
|
|
if (!SettingsConfig.offlineParams.isNullOrEmpty()) {
|
|
|
- callParams.offlinePushInfo = froJsonErrorNull(SettingsConfig.offlineParams, TUICallDefine.OfflinePushInfo::class.java)
|
|
|
+ callParams.offlinePushInfo = froJsonErrorNull(
|
|
|
+ SettingsConfig.offlineParams,
|
|
|
+ TUICallDefine.OfflinePushInfo::class.java
|
|
|
+ )
|
|
|
}
|
|
|
callParams.roomId = TUICommonDefine.RoomId().apply {
|
|
|
// intRoomId = callRoomId.safeToInt()
|
|
|
@@ -508,7 +674,7 @@ class CallManager : BaseFrame<ICallListener>(), ICallManager {
|
|
|
private fun handleUserCurrencyUpdate(notify: UserCurrencyUpdateNotify) {
|
|
|
launch {
|
|
|
val selfUser = TUICallState.instance.selfUser.get() ?: return@launch
|
|
|
- if(notify.isMerchant) {
|
|
|
+ if (notify.isMerchant) {
|
|
|
selfUser.refreshMerchantFreeCallLD.set(true)
|
|
|
return@launch
|
|
|
}
|