| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- //
- // LNOrderRoomViewModel.swift
- // Gami
- //
- // Created by OneeChan on 2026/4/3.
- //
- import Foundation
- protocol LNOrderRoomViewModelNotify: LNRoomViewModelNotify {
- func onOrderRoomUserSeatApplyChanged(session: LNOrderRoomViewModel, apply: LNOrderRoomApplyingSeatType)
- }
- extension LNOrderRoomViewModelNotify {
- func onOrderRoomUserSeatApplyChanged(session: LNOrderRoomViewModel, apply: LNOrderRoomApplyingSeatType) { }
- }
- class LNOrderRoomViewModel: LNRoomSession {
- private(set) var waitingForSeat: LNOrderRoomApplyingSeatType = .none {
- didSet {
- if oldValue != waitingForSeat {
- LNEventDeliver.notifyEvent { ($0 as? LNOrderRoomViewModelNotify)?.onOrderRoomUserSeatApplyChanged(session: self, apply: self.waitingForSeat) }
- }
- }
- }
-
- override func handleSystemMessage(message: LNRoomPushMessage) {
- super.handleSystemMessage(message: message)
-
- if message.cmd == .MicClear,
- let cmd: LNRoomMicClearMessage = message.decodeCmdMessage(),
- cmd.type == self.waitingForSeat {
- self.waitingForSeat = .none
- }
- }
- }
-
- extension LNOrderRoomViewModel {
- // 申请列表
- func getApplyList(type: LNRoomApplySeatType, next: String?, filter: String?,
- handler: @escaping (LNRoomMicApplyListResponse?) -> Void) {
- LNHttpManager.shared.getApplySeatList(roomId: roomId, searchType: type, filter: filter,
- size: 30, next: next ?? "")
- { res, err in
- runOnMain {
- handler(res)
- }
- res?.list.forEach {
- LNProfileManager.shared.updateProfileCache(uid: $0.user.userNo, name: $0.user.nickname, avatar: $0.user.avatar)
- }
- if let err {
- showToast(err.errorDesc)
- }
- }
- }
-
- // 申请列表的技能类别
- func getApplyListCategory(handler: @escaping (LNRoomGameCategoryResponse?) -> Void) {
- LNHttpManager.shared.getApplySeatCategory(roomId: roomId) { res, err in
- runOnMain {
- handler(res)
- }
- if let err {
- showToast(err.errorDesc)
- }
- }
- }
-
-
- // 用户列表
- func getRoomUserList(next: String?, playmete: Bool, filter: String?,
- handler: @escaping (LNRoomUserListResponse?) -> Void) {
- LNHttpManager.shared.getRoomUserList(
- roomId: roomId, size: 30, next: next ?? "",
- playmete: playmete, filter: filter)
- { res, err in
- runOnMain {
- handler(res)
- }
-
- res?.list.forEach {
- LNProfileManager.shared.updateProfileCache(uid: $0.user.userNo, name: $0.user.nickname, avatar: $0.user.avatar)
- }
-
- if let err {
- showToast(err.errorDesc)
- }
- }
- }
-
- // 申请列表的技能类别
- func getPlaymateCategory(handler: @escaping (LNRoomGameCategoryResponse?) -> Void) {
- LNHttpManager.shared.getRoomPlaymateCategory(roomId: roomId) { res, err in
- runOnMain {
- handler(res)
- }
- if let err {
- showToast(err.errorDesc)
- }
- }
- }
- }
- extension LNOrderRoomViewModel: LNRoomViewModelNotify {
- func onRoomUserDidJoinOnSeat(session: LNRoomSession, newSeat: LNRoomSeatItem) {
- waitingForSeat = .none
- }
-
- func onRoomUserDidApplySeat(session: LNRoomSession, index: Int) {
- waitingForSeat = index == LNOrderRoomSeatNum.guest.rawValue ?
- .guest : index != LNOrderRoomSeatNum.host.rawValue ?
- .playmate : .none
- }
-
- func onRoomUserDidCancelApplySeat(session: LNRoomSession) {
- waitingForSeat = .none
- }
- }
|