LNOrderRoomViewModel.swift 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. //
  2. // LNOrderRoomViewModel.swift
  3. // Gami
  4. //
  5. // Created by OneeChan on 2026/4/3.
  6. //
  7. import Foundation
  8. protocol LNOrderRoomViewModelNotify: LNRoomViewModelNotify {
  9. func onOrderRoomUserSeatApplyChanged(session: LNOrderRoomViewModel, apply: LNOrderRoomApplyingSeatType)
  10. }
  11. extension LNOrderRoomViewModelNotify {
  12. func onOrderRoomUserSeatApplyChanged(session: LNOrderRoomViewModel, apply: LNOrderRoomApplyingSeatType) { }
  13. }
  14. class LNOrderRoomViewModel: LNRoomSession {
  15. private(set) var waitingForSeat: LNOrderRoomApplyingSeatType = .none {
  16. didSet {
  17. if oldValue != waitingForSeat {
  18. LNEventDeliver.notifyEvent { ($0 as? LNOrderRoomViewModelNotify)?.onOrderRoomUserSeatApplyChanged(session: self, apply: self.waitingForSeat) }
  19. }
  20. }
  21. }
  22. override func handleSystemMessage(message: LNRoomPushMessage) {
  23. super.handleSystemMessage(message: message)
  24. if message.cmd == .MicClear,
  25. let cmd: LNRoomMicClearMessage = message.decodeCmdMessage(),
  26. cmd.type == self.waitingForSeat {
  27. self.waitingForSeat = .none
  28. }
  29. }
  30. }
  31. extension LNOrderRoomViewModel {
  32. // 申请列表
  33. func getApplyList(type: LNRoomApplySeatType, next: String?, filter: String?,
  34. handler: @escaping (LNRoomMicApplyListResponse?) -> Void) {
  35. LNHttpManager.shared.getApplySeatList(roomId: roomId, searchType: type, filter: filter,
  36. size: 30, next: next ?? "")
  37. { res, err in
  38. runOnMain {
  39. handler(res)
  40. }
  41. res?.list.forEach {
  42. LNProfileManager.shared.updateProfileCache(uid: $0.user.userNo, name: $0.user.nickname, avatar: $0.user.avatar)
  43. }
  44. if let err {
  45. showToast(err.errorDesc)
  46. }
  47. }
  48. }
  49. // 申请列表的技能类别
  50. func getApplyListCategory(handler: @escaping (LNRoomGameCategoryResponse?) -> Void) {
  51. LNHttpManager.shared.getApplySeatCategory(roomId: roomId) { res, err in
  52. runOnMain {
  53. handler(res)
  54. }
  55. if let err {
  56. showToast(err.errorDesc)
  57. }
  58. }
  59. }
  60. // 用户列表
  61. func getRoomUserList(next: String?, playmete: Bool, filter: String?,
  62. handler: @escaping (LNRoomUserListResponse?) -> Void) {
  63. LNHttpManager.shared.getRoomUserList(
  64. roomId: roomId, size: 30, next: next ?? "",
  65. playmete: playmete, filter: filter)
  66. { res, err in
  67. runOnMain {
  68. handler(res)
  69. }
  70. res?.list.forEach {
  71. LNProfileManager.shared.updateProfileCache(uid: $0.user.userNo, name: $0.user.nickname, avatar: $0.user.avatar)
  72. }
  73. if let err {
  74. showToast(err.errorDesc)
  75. }
  76. }
  77. }
  78. // 申请列表的技能类别
  79. func getPlaymateCategory(handler: @escaping (LNRoomGameCategoryResponse?) -> Void) {
  80. LNHttpManager.shared.getRoomPlaymateCategory(roomId: roomId) { res, err in
  81. runOnMain {
  82. handler(res)
  83. }
  84. if let err {
  85. showToast(err.errorDesc)
  86. }
  87. }
  88. }
  89. }
  90. extension LNOrderRoomViewModel: LNRoomViewModelNotify {
  91. func onRoomUserDidJoinOnSeat(session: LNRoomSession, newSeat: LNRoomSeatItem) {
  92. waitingForSeat = .none
  93. }
  94. func onRoomUserDidApplySeat(session: LNRoomSession, index: Int) {
  95. waitingForSeat = index == LNOrderRoomSeatNum.guest.rawValue ?
  96. .guest : index != LNOrderRoomSeatNum.host.rawValue ?
  97. .playmate : .none
  98. }
  99. func onRoomUserDidCancelApplySeat(session: LNRoomSession) {
  100. waitingForSeat = .none
  101. }
  102. }