|
|
@@ -5,7 +5,6 @@ import com.adealink.frame.base.IError
|
|
|
import com.adealink.frame.base.Rlt
|
|
|
import com.adealink.frame.log.Log
|
|
|
import com.adealink.frame.media.data.RtcType
|
|
|
-import com.adealink.frame.room.data.ChannelState
|
|
|
import com.adealink.frame.room.data.FlowStateInfo
|
|
|
import com.adealink.frame.room.data.JoinRoomReq
|
|
|
import com.adealink.frame.room.data.LeaveRoomReason
|
|
|
@@ -34,56 +33,53 @@ open class JoinController(override val ctx: IRoomContext, serialHandler: Handler
|
|
|
BaseController<IJoinListener>(ctx, serialHandler),
|
|
|
IJoinController<IJoinListener>,
|
|
|
IRoomStateChangeListener {
|
|
|
-
|
|
|
-
|
|
|
private var currentRoomState = RoomState.ROOM_LEAVE
|
|
|
- private var currentChannelState = ChannelState.CHANNEL_LEAVE
|
|
|
|
|
|
override var joiningRoomId: String? = null
|
|
|
override var joinedRoomInfo: LiveInfo? = null
|
|
|
|
|
|
- override fun notifyRoomStateChanged(
|
|
|
+ override fun onRoomStateChanged(
|
|
|
fromState: RoomState,
|
|
|
toState: RoomState,
|
|
|
flowStateInfo: FlowStateInfo
|
|
|
) {
|
|
|
- Log.i(
|
|
|
- TAG_ROOM_FLOW,
|
|
|
- "notifyRoomStateChanged, fromState:$fromState, toState:$toState, flowStateInfo:$flowStateInfo"
|
|
|
- )
|
|
|
- ctx.roomService.controllers.forEach {
|
|
|
+ super<BaseController>.onRoomStateChanged(fromState, toState, flowStateInfo)
|
|
|
+ listeners.dispatch {
|
|
|
it.onRoomStateChanged(fromState, toState, flowStateInfo)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- override fun notifyChannelStateChanged(
|
|
|
- fromState: ChannelState,
|
|
|
- toState: ChannelState,
|
|
|
+ override fun notifyRoomStateChanged(
|
|
|
+ fromState: RoomState,
|
|
|
+ toState: RoomState,
|
|
|
flowStateInfo: FlowStateInfo
|
|
|
) {
|
|
|
Log.i(
|
|
|
TAG_ROOM_FLOW,
|
|
|
- "notifyChannelStateChanged, fromState:$fromState, toState:$toState, flowStateInfo:$flowStateInfo"
|
|
|
+ "notifyRoomStateChanged, fromState:$fromState, toState:$toState, flowStateInfo:$flowStateInfo"
|
|
|
)
|
|
|
ctx.roomService.controllers.forEach {
|
|
|
- it.onChannelStateChanged(fromState, toState, flowStateInfo)
|
|
|
+ it.onRoomStateChanged(fromState, toState, flowStateInfo)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
override fun getJoinedRoomId(): String? {
|
|
|
return joinedRoomInfo?.liveID
|
|
|
}
|
|
|
|
|
|
+ override fun isRoomJoiningOrJoined(): Boolean {
|
|
|
+ return joiningRoomId != null || joinedRoomInfo != null
|
|
|
+ }
|
|
|
+
|
|
|
override suspend fun joinRoom(req: JoinRoomReq): Rlt<Any> {
|
|
|
Log.d(TAG_ROOM_FLOW, "joinRoom: $req")
|
|
|
return withContext(this.coroutineContext) {
|
|
|
logRoomTime("joinRoom enter")
|
|
|
-// val joinedRoomId = getJoinedRoomId()
|
|
|
-// if (joinedRoomId == req.roomId) {
|
|
|
-// Log.i(TAG_ROOM_FLOW, "joinRoom, already joined, joinedRoomId:${joinedRoomId}")
|
|
|
-// return@withContext Rlt.Success(Any())
|
|
|
-// }
|
|
|
+ val joinedRoomId = getJoinedRoomId()
|
|
|
+ if (joinedRoomId == req.roomId) {
|
|
|
+ Log.i(TAG_ROOM_FLOW, "joinRoom, already joined, joinedRoomId:${joinedRoomId}")
|
|
|
+ return@withContext Rlt.Success(Any())
|
|
|
+ }
|
|
|
|
|
|
if (joiningRoomId == req.roomId) {
|
|
|
Log.i(TAG_ROOM_FLOW, "joinRoom, same room joining, joiningRoomId:${req.roomId}")
|
|
|
@@ -119,6 +115,10 @@ open class JoinController(override val ctx: IRoomContext, serialHandler: Handler
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ override fun getJoinRoomState(): RoomState {
|
|
|
+ return currentRoomState
|
|
|
+ }
|
|
|
+
|
|
|
private suspend fun suspendJoinRoom(req: JoinRoomReq): Rlt<LiveInfo> {
|
|
|
return suspendCancellableCoroutine { coroutine ->
|
|
|
LiveListStore.shared().joinLive(req.roomId, object : LiveInfoCompletionHandler {
|
|
|
@@ -190,19 +190,19 @@ open class JoinController(override val ctx: IRoomContext, serialHandler: Handler
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- override suspend fun tryEndRoom(reason: LeaveRoomReason, leaveUI: Boolean) {
|
|
|
+ override suspend fun closeRoom(reason: LeaveRoomReason) {
|
|
|
val joinedRoomId = getJoinedRoomId() ?: return
|
|
|
withContext(this.coroutineContext) {
|
|
|
- endLastRoom(joinedRoomId, reason, leaveUI)
|
|
|
+ endLastRoom(joinedRoomId, reason)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- private suspend fun endLastRoom(roomId: String?, reason: LeaveRoomReason, leaveUI: Boolean) {
|
|
|
+ private suspend fun endLastRoom(roomId: String?, reason: LeaveRoomReason) {
|
|
|
val joinedRoomId = roomId ?: return
|
|
|
val flowStateInfo = FlowStateInfo().apply {
|
|
|
this.roomId = joinedRoomId
|
|
|
this.reason = reason.reason
|
|
|
- this.leaveUI = leaveUI
|
|
|
+ this.leaveUI = true
|
|
|
}
|
|
|
clearJoinedRoomInfo()
|
|
|
innerEndRoom(joinedRoomId)
|
|
|
@@ -242,10 +242,4 @@ open class JoinController(override val ctx: IRoomContext, serialHandler: Handler
|
|
|
notifyRoomStateChanged(lastState, toState, flowStateInfo)
|
|
|
}
|
|
|
|
|
|
-
|
|
|
- companion object {
|
|
|
- private const val REJOIN_CHANNEL_DELAY = 10_000L
|
|
|
- private const val REJOINING_INTERVAL_MS = 15 * 1000
|
|
|
- }
|
|
|
-
|
|
|
}
|