85 lines
2.9 KiB
C#
85 lines
2.9 KiB
C#
|
|
// Assets/Script/WebRtc/SignalingMessageHelper.cs
|
||
|
|
|
||
|
|
using System;
|
||
|
|
using System.Reflection;
|
||
|
|
using UnityEngine;
|
||
|
|
|
||
|
|
namespace Unity.RenderStreaming
|
||
|
|
{
|
||
|
|
public static class SignalingMessageHelper
|
||
|
|
{
|
||
|
|
private static object _webSocketSignaling;
|
||
|
|
private static MethodInfo _sendRawMessageMethod;
|
||
|
|
|
||
|
|
static SignalingMessageHelper()
|
||
|
|
{
|
||
|
|
Initialize();
|
||
|
|
}
|
||
|
|
|
||
|
|
private static void Initialize()
|
||
|
|
{
|
||
|
|
try
|
||
|
|
{
|
||
|
|
var signalingManager = GameObject.FindObjectOfType<SignalingManager>();
|
||
|
|
if (signalingManager == null)
|
||
|
|
{
|
||
|
|
Debug.LogWarning("SignalingMessageHelper: 找不到 SignalingManager");
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
var managerInternalField = typeof(SignalingManager).GetField("m_instance",
|
||
|
|
BindingFlags.NonPublic | BindingFlags.Instance);
|
||
|
|
var managerInternal = managerInternalField.GetValue(signalingManager);
|
||
|
|
|
||
|
|
if (managerInternal == null)
|
||
|
|
{
|
||
|
|
Debug.LogWarning("SignalingMessageHelper: SignalingManager 内部实例为空");
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
var signalingField = managerInternal.GetType().GetField("_signaling",
|
||
|
|
BindingFlags.NonPublic | BindingFlags.Instance);
|
||
|
|
_webSocketSignaling = signalingField.GetValue(managerInternal);
|
||
|
|
|
||
|
|
if (_webSocketSignaling == null)
|
||
|
|
{
|
||
|
|
Debug.LogWarning("SignalingMessageHelper: WebSocketSignaling 实例为空");
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
_sendRawMessageMethod = _webSocketSignaling.GetType().GetMethod("SendMessage");
|
||
|
|
if (_sendRawMessageMethod == null) Debug.LogWarning("SignalingMessageHelper: 找不到 SendRawMessage 方法");
|
||
|
|
}
|
||
|
|
catch (Exception e)
|
||
|
|
{
|
||
|
|
Debug.LogError($"SignalingMessageHelper 初始化失败: {e.Message}");
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public static bool SendMessage(string message)
|
||
|
|
{
|
||
|
|
if (_webSocketSignaling == null || _sendRawMessageMethod == null)
|
||
|
|
{
|
||
|
|
Debug.LogError("SignalingMessageHelper 未正确初始化,请确保 WebSocketSignaling 已启动");
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
|
||
|
|
try
|
||
|
|
{
|
||
|
|
_sendRawMessageMethod.Invoke(_webSocketSignaling, new[] { message });
|
||
|
|
Debug.Log("消息已发送到服务端");
|
||
|
|
return true;
|
||
|
|
}
|
||
|
|
catch (Exception e)
|
||
|
|
{
|
||
|
|
Debug.LogError($"发送消息失败: {e.Message}");
|
||
|
|
return false;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
public static bool IsReady()
|
||
|
|
{
|
||
|
|
return _webSocketSignaling != null && _sendRawMessageMethod != null;
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|