Files
webRtc/Assets/Script/MainPanel/MeetingContacts.cs

144 lines
5.4 KiB
C#
Raw Normal View History

using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using RenderStreaming;
using Stary.Evo;
using Unity.RenderStreaming;
using UnityEngine;
using UnityEngine.UI;
namespace Script
{
public class MeetingContacts : IController
{
/// <summary>
/// 联系人列表项字典
/// Key: 参与者ID
/// Value: 联系人列表项实例
/// </summary>
2026-05-19 22:40:52 +08:00
private readonly List<ContactEntryController> _contactEntries = new();
private Image _avatarImage;
private Button _cancelButton;
private Button _confirmButton;
private GameObject _confirmingPop;
/// <summary>
/// 联系人列表项预制体
/// </summary>
private GameObject _contactEntryPrefab;
/// <summary>
/// 全部联系人列表容器
/// </summary>
private Transform _content;
private Text _idText;
private InputField _leaveMessage;
private Text _messageText;
private Text _nameText;
2026-05-19 22:40:52 +08:00
public GameObject PanelGo;
public ContactEntryController CurrentEntry { get; set; }
2026-05-19 22:40:52 +08:00
private GameObjectPool _objectPool;
public IArchitecture GetArchitecture()
{
return MainArchitecture.Interface;
}
public void Initialize(GameObject panelGo)
{
2026-05-19 22:40:52 +08:00
PanelGo = panelGo;
_contactEntryPrefab = Resources.Load<GameObject>("ContactEntry");
2026-05-19 22:40:52 +08:00
_content = PanelGo.transform.Find("MeetingGrid/Viewport/Content");
//邀请界面
2026-05-19 22:40:52 +08:00
_confirmingPop = PanelGo.transform.Find("MeetingGrid/ConfirmingPop").gameObject;
_confirmingPop.SetActive(false);
//确认邀请
_idText = _confirmingPop.transform.Find("bg/id").GetComponent<Text>();
_leaveMessage = _confirmingPop.transform.Find("bg/leaveMessage").GetComponent<InputField>();
_confirmButton = _confirmingPop.transform.Find("bg/invite").GetComponent<Button>();
_cancelButton = _confirmingPop.transform.Find("bg/cancel").GetComponent<Button>();
_avatarImage = _confirmingPop.transform.Find("ParticipantEntry/head").GetComponent<Image>();
_nameText = _confirmingPop.transform.Find("ParticipantEntry/Name").GetComponent<Text>();
_messageText = _confirmingPop.transform.Find("ParticipantEntry/Message").GetComponent<Text>();
2026-05-19 22:40:52 +08:00
_objectPool = PanelGo.transform.Find("MeetingGrid/Pool").GetComponent<GameObjectPool>();
}
public async void OnEnter()
{
2026-05-19 22:40:52 +08:00
foreach (var entry in _contactEntries)
_objectPool.Release(entry.gameObject);
_contactEntries.Clear();
var response =
2026-05-19 22:40:52 +08:00
await WebRequestSystem.Get<MainPanel.ResponseUsers>(this.GetSystem<IGlobalConfigSystem>().IP,
"/signaling/users");
if (response != null && response.totalCount > 0)
for (var i = 0; i < response.totalCount; i++)
{
var item = response.users[i];
if (string.IsNullOrEmpty(item.name) ||
string.IsNullOrEmpty(item.userId)) continue;
2026-05-19 22:40:52 +08:00
var entry = _objectPool.Get();
var contactEntryController = entry.GetOrAddComponent<ContactEntryController>();
contactEntryController.SetData(item, this);
2026-05-19 22:40:52 +08:00
_contactEntries.Add(contactEntryController);
}
}
public void OnExit()
{
}
2026-05-19 22:40:52 +08:00
public void ClickContactEntry(Sprite avatarImage, string name, MainPanel.UsersItem item)
{
_confirmingPop.SetActive(true);
_idText.text = this.GetSystem<IGlobalConfigSystem>().GetConnectionId();
_avatarImage.sprite = avatarImage;
var avatarName = _avatarImage.transform.Find("Name").GetComponent<Text>();
avatarName.text = name;
_nameText.text = item.name;
_messageText.text = item.userId;
_confirmButton.onClick.AddListener(() =>
{
_confirmingPop.SetActive(false);
CurrentEntry.StartCountdown();
// var avatar = _profileImage.sprite.name.Replace("(Clone)", "");
var userInfo = new
{
type = "invite-call",
data = new
{
connectionId = this.GetSystem<IGlobalConfigSystem>().GetConnectionId(),
targetSocketId = item.socketId,
targetUserId = item.userId,
inviterUserId = this.GetSystem<IGlobalConfigSystem>().GetUserId(),
inviterName = this.GetSystem<IGlobalConfigSystem>().GetConnectionName(),
inviterAvatar =
$"{this.GetSystem<IGlobalConfigSystem>().IP}/images/head/" +
2026-05-19 22:40:52 +08:00
$"{this.GetSystem<IGlobalConfigSystem>().GetConnectionTexture()}.png",
applyReason = _leaveMessage.text
}
};
SignalingMessageHelper.SendMessage(JsonConvert.SerializeObject(userInfo));
});
_cancelButton.onClick.AddListener(() =>
{
_confirmingPop.SetActive(false);
CurrentEntry = null;
});
}
}
}