| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123 |
- //
- // LNRoomViewController.swift
- // Gami
- //
- // Created by OneeChan on 2026/3/9.
- //
- import Foundation
- import UIKit
- import SnapKit
- extension UIView {
- func pushToRoom(_ id: String) {
- guard let navigationController else { return }
- if LNRoomManager.shared.curRoom?.roomId == id,
- let liveVC = navigationController.viewControllers.first(where: { $0 is LNRoomViewController }) {
- navigationController.popToViewController(liveVC, animated: true)
- return
- }
-
- let index = navigationController.viewControllers.firstIndex(where: { $0 is LNRoomViewController })
-
- showLoading()
- LNRoomManager.shared.leaveRoom { success in
- guard success else {
- dismissLoading()
- return
- }
- LNRoomManager.shared.joinRoom(roomId: id) { roomId in
- dismissLoading()
- guard let roomId else { return }
- if let index {
- var viewControllers = Array(navigationController.viewControllers[0..<index])
- viewControllers.append(LNRoomViewController(roomId))
- navigationController.setViewControllers(viewControllers, animated: true)
- } else {
- let vc = LNRoomViewController(roomId)
- navigationController.pushViewController(vc, animated: true)
- }
- }
- }
- }
- }
- class LNRoomViewController: LNViewController {
- private let viewModel: LNRoomViewModel
- private let bg = UIImageView()
- private let topMenuView = LNRoomTopMenuView()
- private let bottomMenuView = LNRoomBottomMenuView()
- private let seatsView = LNRoomSeatsView()
- private let messageView = LNRoomMessageView()
-
- init(_ id: String) {
- viewModel = LNRoomViewModel(roomId: id)
- super.init(nibName: nil, bundle: nil)
-
- LNEventDeliver.addObserver(self)
- }
-
- required init?(coder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
-
- override func viewDidLoad() {
- super.viewDidLoad()
-
- setupViews()
- }
- }
- extension LNRoomViewController: LNRoomViewModelNotify {
- func onRoomClosed() {
- if view.window != nil {
- navigationController?.popViewController(animated: true)
- } else if let index = navigationController?.viewControllers.firstIndex(of: self) {
- navigationController?.viewControllers.remove(at: index)
- }
- }
- }
- extension LNRoomViewController {
- private func setupViews() {
- enableDragBack = false
- showNavigationBar = false
-
- bg.image = .icRoomBg
- view.addSubview(bg)
- bg.snp.makeConstraints { make in
- make.edges.equalToSuperview()
- }
-
- topMenuView.update(viewModel)
- view.addSubview(topMenuView)
- topMenuView.snp.makeConstraints { make in
- make.horizontalEdges.equalToSuperview()
- make.top.equalTo(view.safeAreaLayoutGuide.snp.top)
- }
-
- seatsView.update(viewModel)
- view.addSubview(seatsView)
- seatsView.snp.makeConstraints { make in
- make.top.equalTo(topMenuView.snp.bottom).offset(24)
- make.horizontalEdges.equalToSuperview()
- }
-
- bottomMenuView.update(viewModel)
- view.addSubview(bottomMenuView)
- bottomMenuView.snp.makeConstraints { make in
- make.horizontalEdges.equalToSuperview()
- make.bottom.equalToSuperview().offset(view.commonBottomInset)
- }
-
- messageView.update(viewModel)
- view.addSubview(messageView)
- messageView.snp.makeConstraints { make in
- make.leading.equalToSuperview().offset(10)
- make.trailing.equalToSuperview().offset(-85)
- make.bottom.equalTo(bottomMenuView.snp.top).offset(-5)
- make.top.equalTo(seatsView.snp.bottom).offset(22)
- }
- }
- }
|