237 lines
8.0 KiB
C#
237 lines
8.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using Script.Util;
|
|
using Stary.Evo;
|
|
using Stary.Evo.UIFarme;
|
|
using Unity.RenderStreaming;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
namespace Script
|
|
{
|
|
public class MainPanel : BasePanel
|
|
{
|
|
/// <summary>
|
|
/// 退出按钮
|
|
/// </summary>
|
|
private Button _arrowLeft;
|
|
|
|
private Toggle _chatTog;
|
|
private Toggle _contactsTog;
|
|
private Toggle _meetingOrganizersTog;
|
|
|
|
/// <summary>
|
|
/// 房间ID
|
|
/// </summary>
|
|
private Text _idText;
|
|
|
|
/// <summary>
|
|
/// 会议联系人类和面板
|
|
/// </summary>
|
|
private MeetingContactsController _meetingContactsController;
|
|
|
|
/// <summary>
|
|
/// 会议参与者列表和面板
|
|
/// </summary>
|
|
private MeetingInfoListController _meetingInfoListController;
|
|
|
|
/// <summary>
|
|
/// 会议聊天面板
|
|
/// </summary>
|
|
private MeetingChatController _meetingChatController;
|
|
|
|
/// <summary>
|
|
/// 房间人数
|
|
/// </summary>
|
|
private Text _roomPeopleNumText;
|
|
|
|
private Transform _userGrid;
|
|
|
|
/// <summary>
|
|
/// 时间
|
|
/// </summary>
|
|
private Text _timeText;
|
|
|
|
/// <summary>
|
|
/// 标题
|
|
/// </summary>
|
|
private Text _titleText;
|
|
|
|
public override UITweenType TweenType => UITweenType.Fade;
|
|
|
|
public override string UIPath => "XREALVirtualController(Clone)/Canvas";
|
|
|
|
public Action<List<UsersItem>> OnUsersChangedEvnent;
|
|
private Dictionary<UsersItem, GameObject> _userMap = new();
|
|
|
|
private GameObjectPool _objectPool;
|
|
|
|
public override void Initialize(GameObject panelGo)
|
|
{
|
|
base.Initialize(panelGo);
|
|
_titleText = panelGo.transform.Find("Header/title").GetComponent<Text>();
|
|
_timeText = panelGo.transform.Find("Header/time").GetComponent<Text>();
|
|
_arrowLeft = panelGo.transform.Find("Header/arrow-left").GetComponent<Button>();
|
|
_idText = panelGo.transform.Find("MeetingInfoCard/meeting/id").GetComponent<Text>();
|
|
_roomPeopleNumText = panelGo.transform.Find("MeetingInfoCard/numberOfPeople/number").GetComponent<Text>();
|
|
_userGrid = panelGo.transform.Find("MeetingInfoCard/userGrid");
|
|
_objectPool = panelGo.transform.Find("MeetingInfoCard/pool").GetComponent<GameObjectPool>();
|
|
_chatTog = panelGo.transform.Find("Tabs/Chat").GetComponent<Toggle>();
|
|
_contactsTog = panelGo.transform.Find("Tabs/Contacts").GetComponent<Toggle>();
|
|
_meetingOrganizersTog = panelGo.transform.Find("Tabs/MeetingOrganizers").GetComponent<Toggle>();
|
|
|
|
_meetingContactsController = new MeetingContactsController();
|
|
_meetingContactsController.Initialize(panelGo.transform.Find("MeetingContacts").gameObject);
|
|
_meetingInfoListController = new MeetingInfoListController();
|
|
_meetingInfoListController.Initialize(panelGo.transform.Find("MeetingInfoList").gameObject, this);
|
|
_meetingChatController = new MeetingChatController();
|
|
_meetingChatController.Initialize(panelGo.transform.Find("MeetingChat").gameObject, this);
|
|
}
|
|
|
|
public override void OnEnter(Action complete = null)
|
|
{
|
|
base.OnEnter(complete);
|
|
_meetingInfoListController.OnEnter();
|
|
_titleText.text = this.GetSystem<IGlobalConfigSystem>().GetConnectionName();
|
|
this.GetSystem<IGlobalConfigSystem>().StartConnectionTime(_timeText);
|
|
_idText.text = this.GetSystem<IGlobalConfigSystem>().GetConnectionId();
|
|
_arrowLeft.onClick.AddListener(OnArrowLeftClick);
|
|
_chatTog.onValueChanged.AddListener(OnChatTog);
|
|
_contactsTog.onValueChanged.AddListener(OnContactsTog);
|
|
_meetingOrganizersTog.onValueChanged.AddListener(OnMeetingOrganizersTog);
|
|
OnUsersChangedEvnent += OnUsersChanged;
|
|
GameObject.FindObjectOfType<HostConnection>().OnParticipantDisconnected += OnUsersChangedDisconnected;
|
|
}
|
|
|
|
|
|
public override void OnExit(float delay = 0)
|
|
{
|
|
base.OnExit(delay);
|
|
_meetingInfoListController.OnExit();
|
|
_arrowLeft.onClick.RemoveListener(OnArrowLeftClick);
|
|
_chatTog.onValueChanged.RemoveListener(OnChatTog);
|
|
_contactsTog.onValueChanged.RemoveListener(OnContactsTog);
|
|
_meetingOrganizersTog.onValueChanged.RemoveListener(OnMeetingOrganizersTog);
|
|
OnUsersChangedEvnent += OnUsersChanged;
|
|
}
|
|
|
|
private async void OnUsersChanged(List<UsersItem> obj)
|
|
{
|
|
foreach (var user in _userMap) _objectPool.Release(user.Value.gameObject);
|
|
|
|
_userMap.Clear();
|
|
_roomPeopleNumText.text = obj.Count.ToString();
|
|
for (var i = 0; i < obj.Count; i++)
|
|
{
|
|
if (i > 4) break;
|
|
var entry = _objectPool.Get();
|
|
await WebRTCUtil.DownloadAndSetAvatar(obj[i].avatar,
|
|
entry.transform.Find("image").GetComponent<Image>());
|
|
_userMap.TryAdd(obj[i], entry);
|
|
|
|
if (obj[i].role == "host")
|
|
{
|
|
this.GetSystem<IGlobalConfigSystem>().SetParticipantId(obj[i].participantId);
|
|
}
|
|
}
|
|
|
|
// 更新会议聊天面板人数
|
|
_meetingChatController.OnUserCountChangedEvent?.Invoke(obj.Count);
|
|
}
|
|
|
|
private void OnUsersChangedDisconnected(string obj)
|
|
{
|
|
UsersItem usersItem = null;
|
|
foreach (var item in _userMap.Keys)
|
|
if (item.participantId == obj)
|
|
{
|
|
usersItem = item;
|
|
break;
|
|
}
|
|
|
|
if (usersItem != null)
|
|
if (_userMap.TryGetValue(usersItem, out var entry))
|
|
{
|
|
_objectPool.Release(entry);
|
|
_userMap.Remove(usersItem);
|
|
}
|
|
|
|
_roomPeopleNumText.text = _userMap.Count.ToString();
|
|
_meetingChatController.OnUserCountChangedEvent?.Invoke(_userMap.Count);
|
|
}
|
|
|
|
private void OnMeetingOrganizersTog(bool value)
|
|
{
|
|
_meetingInfoListController.PanelGo.SetActive(value);
|
|
}
|
|
|
|
private void OnContactsTog(bool value)
|
|
{
|
|
_meetingContactsController.PanelGo.SetActive(value);
|
|
if (value)
|
|
_meetingContactsController.OnEnter();
|
|
}
|
|
|
|
private void OnChatTog(bool value)
|
|
{
|
|
_meetingChatController.PanelGo.SetActive(value);
|
|
if (value)
|
|
_meetingChatController.OnEnter();
|
|
}
|
|
|
|
private void OnArrowLeftClick()
|
|
{
|
|
}
|
|
|
|
public override void OnDestroy()
|
|
{
|
|
base.OnDestroy();
|
|
_meetingChatController.OnDestroy();
|
|
_meetingContactsController.OnDestroy();
|
|
}
|
|
|
|
[Serializable]
|
|
public class ResponseUsers
|
|
{
|
|
/// <summary>
|
|
/// </summary>
|
|
public List<UsersItem> users { get; set; }
|
|
|
|
/// <summary>
|
|
/// </summary>
|
|
public int totalCount { get; set; }
|
|
}
|
|
|
|
[Serializable]
|
|
public class UsersItem
|
|
{
|
|
/// <summary>
|
|
/// </summary>
|
|
public string socketId { get; set; }
|
|
|
|
/// <summary>
|
|
/// </summary>
|
|
public string connectionId { get; set; }
|
|
|
|
/// <summary>
|
|
/// </summary>
|
|
public string participantId { get; set; }
|
|
|
|
/// <summary>
|
|
/// </summary>
|
|
public string role { get; set; }
|
|
|
|
/// <summary>
|
|
/// </summary>
|
|
public string userId { get; set; }
|
|
|
|
/// <summary>
|
|
/// </summary>
|
|
public string name { get; set; }
|
|
|
|
/// <summary>
|
|
/// </summary>
|
|
public string avatar { get; set; }
|
|
}
|
|
}
|
|
} |