| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202 |
- //
- // TUIRoomViewController.swift
- // TUIRoom
- //
- // Created by WesleyLei on 2021/12/16.
- // Copyright © 2021 Tencent. All rights reserved.
- //
- import SnapKit
- import UIKit
- import TUIRoomKit
- import TUICore
- import RTCRoomEngine
- class EnterRoomViewController: UIViewController {
- weak var rootView: EnterRoomView?
- private var fieldText: String = ""
- private(set) var inputViewItems: [ListCellItemData] = []
- private(set) var switchViewItems: [ListCellItemData] = []
- private let currentUserName: String = TUILogin.getNickName() ?? ""
- private let currentUserId: String = TUILogin.getUserID() ?? ""
- private var roomId: String = ""
- private var enableLocalAudio: Bool = true
- private var enableLocalVideo: Bool = true
- private var isSoundOnSpeaker: Bool = true
-
- let backButton: UIButton = {
- let button = UIButton(type: .custom)
- let normalIcon = UIImage(named: "room_back_white")
- button.setImage(normalIcon, for: .normal)
- button.setTitleColor(UIColor(0xD1D9EC), for: .normal)
- return button
- }()
-
- override var shouldAutorotate: Bool {
- return false
- }
-
- override var supportedInterfaceOrientations: UIInterfaceOrientationMask {
- return .portrait
- }
-
- init() {
- super.init(nibName: nil, bundle: nil)
- createItems()
- backButton.addTarget(self, action: #selector(backButtonClick(sender:)), for: .touchUpInside)
- }
-
- required init?(coder: NSCoder) {
- fatalError("init(coder:) has not been implemented")
- }
-
- override func loadView() {
- let rootView = EnterRoomView()
- rootView.rootViewController = self
- view = rootView
- self.rootView = rootView
- }
-
- override func viewDidLoad() {
- super.viewDidLoad()
- ConferenceSession.sharedInstance.addObserver(observer: self)
- }
-
- override func viewWillAppear(_ animated: Bool) {
- super.viewWillAppear(animated)
- navigationController?.setNavigationBarHidden(false, animated: false)
- navigationItem.leftBarButtonItem = UIBarButtonItem(customView: backButton)
- UIApplication.shared.isIdleTimerDisabled = false
- }
-
- @objc func backButtonClick(sender: UIButton) {
- navigationController?.popViewController(animated: true)
- }
-
- deinit {
- ConferenceSession.sharedInstance.removeObserver(observer: self)
- debugPrint("deinit \(self)")
- }
- }
- extension EnterRoomViewController {
- private func createItems() {
- let enterRoomIdItem = ListCellItemData()
- enterRoomIdItem.titleText = .roomNumText
- enterRoomIdItem.fieldEnable = true
- enterRoomIdItem.hasFieldView = true
- enterRoomIdItem.fieldPlaceholderText = .placeholderTipsText
- enterRoomIdItem.action = { [weak self] sender in
- guard let self = self, let view = sender as? UITextField else { return }
- self.fieldText = view.text ?? ""
- }
- inputViewItems.append(enterRoomIdItem)
-
- let userNameItem = ListCellItemData()
- userNameItem.titleText = .userNameText
- userNameItem.messageText = currentUserName
- userNameItem.hasDownLineView = false
- inputViewItems.append(userNameItem)
-
- let openMicItem = ListCellItemData()
- openMicItem.titleText = .openMicText
- openMicItem.hasSwitch = true
- openMicItem.isSwitchOn = enableLocalAudio
- openMicItem.action = {[weak self] sender in
- guard let self = self, let view = sender as? UISwitch else { return }
- self.enableLocalAudio = view.isOn
- }
- switchViewItems.append(openMicItem)
-
- let openSpeakerItem = ListCellItemData()
- openSpeakerItem.titleText = .openSpeakerText
- openSpeakerItem.hasSwitch = true
- openSpeakerItem.isSwitchOn = true
- openSpeakerItem.action = {[weak self] sender in
- guard let self = self, let view = sender as? UISwitch else { return }
- self.isSoundOnSpeaker = view.isOn
- }
- switchViewItems.append(openSpeakerItem)
-
- let openCameraItem = ListCellItemData()
- openCameraItem.titleText = .openCameraText
- openCameraItem.hasSwitch = true
- openCameraItem.isSwitchOn = enableLocalVideo
- openCameraItem.hasDownLineView = false
- openCameraItem.action = {[weak self] sender in
- guard let self = self, let view = sender as? UISwitch else { return }
- self.enableLocalVideo = view.isOn
- }
- switchViewItems.append(openCameraItem)
- }
-
- func enterButtonClick(sender: UIButton) {
- if fieldText.count <= 0 {
- view.makeToast(.enterRoomIdErrorToast)
- return
- }
- let roomIDStr = fieldText
- .replacingOccurrences(of: " ",
- with: "",
- options: .literal,
- range: nil)
- if roomIDStr.count <= 0 {
- view.makeToast(.enterRoomIdErrorToast)
- return
- }
- roomId = roomIDStr
- joinConference(roomId: roomId)
- }
-
- private func joinConference(roomId: String) {
- let vc = ConferenceMainViewController()
- let params = JoinConferenceParams(roomId: roomId)
- params.isOpenMicrophone = enableLocalAudio
- params.isOpenCamera = enableLocalVideo
- params.isOpenSpeaker = isSoundOnSpeaker
- vc.setJoinConferenceParams(params: params)
- navigationController?.pushViewController(vc, animated: true)
- }
-
- }
- extension EnterRoomViewController: ConferenceObserver {
- func onConferenceJoined(roomInfo: TUIRoomInfo, error: TUIError, message: String) {
- guard error != .success else { return }
- navigationController?.popViewController(animated: true)
- guard !message.isEmpty else { return }
- SceneDelegate.getCurrentWindow()?.makeToast(message, duration: 1, position:TUICSToastPositionCenter)
- }
-
- func onConferenceFinished(roomInfo: TUIRoomInfo, reason: ConferenceFinishedReason) {
- debugPrint("onConferenceFinished")
- }
-
- func onConferenceExited(roomInfo: TUIRoomInfo, reason: ConferenceExitedReason) {
- debugPrint("onConferenceExited")
- }
- }
- private extension String {
- static var enterRoomIdErrorToast: String {
- RoomDemoLocalize("Enter a valid room ID.")
- }
- static var placeholderTipsText: String {
- RoomDemoLocalize("Enter a room ID")
- }
- static var userNameText: String {
- RoomDemoLocalize("Your Name")
- }
- static var roomNumText: String {
- RoomDemoLocalize("Room ID")
- }
- static var openCameraText: String {
- RoomDemoLocalize("Video")
- }
- static var openMicText: String {
- RoomDemoLocalize("Mic")
- }
- static var openSpeakerText: String {
- RoomDemoLocalize("Speaker")
- }
- }
|