Ver código fonte

feat: 进房和创建房间时,调用私有的 extiRoom,确保不存同时在多个房间

陈文艺 2 dias atrás
pai
commit
5eb90c31fa

+ 2 - 0
Lanu/Common/Storage/LNUserDefaultsKey.swift

@@ -24,4 +24,6 @@ enum LNUserDefaultsKey: String {
     
     case location
     case reportLocationTime
+    
+    case joinedRoomId
 }

+ 19 - 15
Lanu/Manager/Room/LNRoomManager.swift

@@ -7,6 +7,7 @@
 
 import Foundation
 import AtomicXCore
+import RTCRoomEngine
 
 
 protocol LNRoomManagerNotify {
@@ -64,12 +65,15 @@ extension LNRoomManager {
     func createRoom(roomName: String, cover: String, queue: DispatchQueue = .main,
                     forbidAudio: Bool, handler: @escaping (String?) -> Void)
     {
-        LNHttpManager.shared.createRoom(roomTitle: roomName, roomCover: cover, forbidAudio: forbidAudio) { room, err in
-            queue.asyncIfNotGlobal {
-                handler(room?.roomId)
-            }
-            if let err {
-                showToast(err.errorDesc)
+        leaveRoom { _ in
+            LNHttpManager.shared.createRoom(roomTitle: roomName, roomCover: cover, forbidAudio: forbidAudio) { room, err in
+                queue.asyncIfNotGlobal {
+                    handler(room?.roomId)
+                    LNUserDefaults[.joinedRoomId] = room?.roomId
+                }
+                if let err {
+                    showToast(err.errorDesc)
+                }
             }
         }
     }
@@ -80,6 +84,7 @@ extension LNRoomManager {
                 switch result {
                 case .success(let info):
                     handler(info.liveID)
+                    LNUserDefaults[.joinedRoomId] = roomId
                 case .failure(let errorInfo):
                     handler(nil)
                     showToast(errorInfo.message)
@@ -103,15 +108,14 @@ extension LNRoomManager {
     }
     
     func leaveRoom(queue: DispatchQueue = .main, handler: @escaping (Bool) -> Void) {
-        liveListStore.leaveLive { result in
-            queue.asyncIfNotGlobal {
-                switch result {
-                case .success:
-                    handler(true)
-                case .failure(let errorInfo):
-                    handler(false)
-                    showToast(errorInfo.message)
-                }
+        let curLive: String = curRoom?.roomId ?? LNUserDefaults[.joinedRoomId, ""]
+        if curLive.isEmpty {
+            handler(true)
+        } else {
+            let json = "{\"api\":\"exitRoom\",\"params\":{\"roomId\":\"\(curLive)\",\"syncWaiting\":true,\"roomType\":2}}"
+            TUIRoomEngine.sharedInstance().callExperimentalAPI(jsonStr: json) { error in
+                handler(true)
+                LNUserDefaults[.joinedRoomId] = ""
             }
         }
     }