【m】插件上传

This commit is contained in:
2026-04-28 16:48:04 +08:00
parent 459db5ec01
commit 753878bdbb
631 changed files with 91583 additions and 11 deletions

View File

@@ -0,0 +1,141 @@
using System;
using System.Collections.Generic;
using Unity.WebRTC;
using UnityEngine;
using UnityEngine.EventSystems;
namespace Unity.RenderStreaming
{
internal class SignalingEventProvider
{
private List<WeakReference<GameObject>> m_list = new List<WeakReference<GameObject>>();
public SignalingEventProvider(IRenderStreamingDelegate handler)
{
handler.onCreatedConnection += OnCreatedConnection;
handler.onDeletedConnection += OnDeletedConnection;
handler.onConnect += OnConnect;
handler.onDisconnect += OnDisconnect;
handler.onGotOffer += OnGotOffer;
handler.onGotAnswer += OnGotAnswer;
handler.onAddChannel += OnAddChannel;
handler.onAddTransceiver += OnAddReceiver;
}
public bool Subscribe(Component comp)
{
if (Find(comp.gameObject) != null)
return false;
m_list.Add(new WeakReference<GameObject>(comp.gameObject));
return true;
}
public bool Unsubscribe(Component comp)
{
var a = Find(comp.gameObject);
if (a == null)
return false;
m_list.Remove(a);
return true;
}
private WeakReference<GameObject> Find(GameObject obj)
{
return m_list.Find(r =>
{
if (!r.TryGetTarget(out var _obj))
return false;
return obj == _obj;
});
}
private void ExecuteEventToAllTargets<T>(
BaseEventData data, ExecuteEvents.EventFunction<T> functor)
where T : IEventSystemHandler
{
foreach (var r in m_list)
{
if (!r.TryGetTarget(out var obj))
continue;
ExecuteEvents.Execute(obj, data, functor);
}
}
private void OnCreatedConnection(string connectionId)
{
var data = new SignalingEventData(EventSystem.current)
{
connectionId = connectionId
};
ExecuteEventToAllTargets(data, ExecuteSignalingEvents.createdConnectionHandler);
}
private void OnDeletedConnection(string connectionId)
{
var data = new SignalingEventData(EventSystem.current)
{
connectionId = connectionId
};
ExecuteEventToAllTargets(data, ExecuteSignalingEvents.deletedConnectionHandler);
}
private void OnGotOffer(string connectionId, string sdp)
{
var data = new SignalingEventData(EventSystem.current)
{
connectionId = connectionId,
sdp = sdp
};
ExecuteEventToAllTargets(data, ExecuteSignalingEvents.offerHandler);
}
private void OnGotAnswer(string connectionId, string sdp)
{
var data = new SignalingEventData(EventSystem.current)
{
connectionId = connectionId,
sdp = sdp
};
ExecuteEventToAllTargets(data, ExecuteSignalingEvents.answerHandler);
}
private void OnConnect(string connectionId)
{
var data = new SignalingEventData(EventSystem.current)
{
connectionId = connectionId
};
ExecuteEventToAllTargets(data, ExecuteSignalingEvents.connectHandler);
}
private void OnDisconnect(string connectionId)
{
var data = new SignalingEventData(EventSystem.current)
{
connectionId = connectionId
};
ExecuteEventToAllTargets(data, ExecuteSignalingEvents.disconnectHandler);
}
private void OnAddChannel(string connectionId, RTCDataChannel channel)
{
var data = new SignalingEventData(EventSystem.current)
{
connectionId = connectionId,
channel = channel
};
ExecuteEventToAllTargets(data, ExecuteSignalingEvents.addChannelHandler);
}
private void OnAddReceiver(string connectionId, RTCRtpTransceiver transceiver)
{
var data = new SignalingEventData(EventSystem.current)
{
connectionId = connectionId,
transceiver = transceiver
};
ExecuteEventToAllTargets(data, ExecuteSignalingEvents.addReceiverHandler);
}
}
}