Files
daluandou/.codely.packages/cn.tuanjie.codely.bridge@1.0.85-47f31100/Editor/Bridge/Native/NativeWindowBridgeAPI.cs
T
huadexuan 13d0c80335 ```
chore(bridge): 删除桥接包的提交记录和Git属性配置

删除了 .codely-bridge-commit 文件中存储的提交哈希值
移除了 .gitattributes 文件中的行结束符配置规则
```
2026-09-24 21:41:14 +08:00

284 lines
10 KiB
C#

using System;
using System.Runtime.InteropServices;
namespace UnityTcp.Editor.Native
{
/// <summary>
/// Low-level P/Invoke declarations for the NativeWindowBridge streaming plugin.
/// Mirrors NativeWindowBridge.h C ABI exactly.
/// </summary>
internal static class NativeWindowBridgeAPI
{
// Keep the delegate type available cross-platform so managed references compile.
// On unsupported platforms, NWB_SetLogCallback is a no-op and never reaches native code.
internal delegate void NWB_LogCallbackDelegate(int level, string message);
#if UNITY_EDITOR_WIN || UNITY_EDITOR_OSX
private const string DllName = "NativeWindowBridge";
[DllImport(DllName, EntryPoint = "NWB_StartServer")]
private static extern int NWB_StartServer_Native(int httpPort);
[DllImport(DllName, EntryPoint = "NWB_StopServer")]
private static extern void NWB_StopServer_Native();
[DllImport(DllName, EntryPoint = "NWB_IsRunning")]
private static extern int NWB_IsRunning_Native();
[DllImport(DllName, EntryPoint = "NWB_GetBoundPort")]
private static extern int NWB_GetBoundPort_Native();
[DllImport(DllName, EntryPoint = "NWB_UpdateWindowList", CharSet = CharSet.Ansi)]
private static extern int NWB_UpdateWindowList_Native(string windowsJson);
[DllImport(DllName, EntryPoint = "NWB_SetUnityPid")]
private static extern void NWB_SetUnityPid_Native(int pid);
[DllImport(DllName, EntryPoint = "NWB_GetWindowListJson")]
private static extern int NWB_GetWindowListJson_Native(byte[] buffer, int bufferCapacity, out int outBytes);
[DllImport(DllName, EntryPoint = "NWB_GetStreamStatusJson")]
private static extern int NWB_GetStreamStatusJson_Native(byte[] buffer, int bufferCapacity, out int outBytes);
// Offscreen rendering mode: C# pushes frames and polls input events.
[DllImport(DllName, EntryPoint = "NWB_StartOffscreenCapture")]
private static extern int NWB_StartOffscreenCapture_Native(int fps, int width, int height);
/// <summary>Stops offscreen/OS capture on the native side (resets m_OffscreenMode).</summary>
[DllImport(DllName, EntryPoint = "NWB_StopCapture")]
private static extern void NWB_StopCapture_Native();
[DllImport(DllName, EntryPoint = "NWB_PushFrame")]
private static extern int NWB_PushFrame_Native(IntPtr bgraData, int width, int height, int stride);
[DllImport(DllName, EntryPoint = "NWB_GetPendingInput")]
private static extern int NWB_GetPendingInput_Native(byte[] buffer, int bufferSize);
[DllImport(DllName, EntryPoint = "NWB_GetPendingOffscreenRequest")]
private static extern int NWB_GetPendingOffscreenRequest_Native(
byte[] windowTypeBuf, int bufSize,
out int outFps, out int outWidth, out int outHeight, out float outDpr);
[DllImport(DllName, EntryPoint = "NWB_GetPendingCompositeRequest")]
private static extern int NWB_GetPendingCompositeRequest_Native(
byte[] jsonBuf, int bufSize,
out int outFps, out int outWidth, out int outHeight, out float outDpr);
[DllImport(DllName, EntryPoint = "NWB_IsOffscreenActive")]
private static extern int NWB_IsOffscreenActive_Native();
// Check for pending resize request from frontend (via /stream/resize).
// Returns 1 if pending (and clears it), 0 otherwise.
[DllImport(DllName, EntryPoint = "NWB_GetPendingResize")]
private static extern int NWB_GetPendingResize_Native(out int outWidth, out int outHeight, out float outDpr);
// Query the active offscreen capture window type (survives domain reload).
// Returns bytes written (excluding null), or 0 if no active offscreen.
[DllImport(DllName, EntryPoint = "NWB_GetActiveOffscreenWindowType")]
private static extern int NWB_GetActiveOffscreenWindowType_Native(byte[] buffer, int bufferSize);
// Send a UTF-8 JSON message to the browser via the WebRTC DataChannel.
[DllImport(DllName, EntryPoint = "NWB_SendDataChannelMessage")]
private static extern int NWB_SendDataChannelMessage_Native(byte[] jsonUtf8, int length);
// Seconds since the last browser heartbeat arrived via DataChannel.
// Tracked in C++ (WebRTC thread), accurate even when C# main thread
// is blocked. Returns -1 if no heartbeat has been received yet.
[DllImport(DllName, EntryPoint = "NWB_GetSecondsSinceLastHeartbeat")]
private static extern float NWB_GetSecondsSinceLastHeartbeat_Native();
[DllImport(DllName, EntryPoint = "NWB_SetLogCallback")]
private static extern void NWB_SetLogCallback_Native(NWB_LogCallbackDelegate callback);
#endif
// Public managed surface. On unsupported platforms this is intentionally
// implemented as no-op/default so shared code compiles and does not call native.
internal static int NWB_StartServer(int httpPort)
{
#if UNITY_EDITOR_WIN || UNITY_EDITOR_OSX
return NWB_StartServer_Native(httpPort);
#else
return 0;
#endif
}
internal static void NWB_StopServer()
{
#if UNITY_EDITOR_WIN || UNITY_EDITOR_OSX
NWB_StopServer_Native();
#endif
}
internal static int NWB_IsRunning()
{
#if UNITY_EDITOR_WIN || UNITY_EDITOR_OSX
return NWB_IsRunning_Native();
#else
return 0;
#endif
}
internal static int NWB_GetBoundPort()
{
#if UNITY_EDITOR_WIN || UNITY_EDITOR_OSX
return NWB_GetBoundPort_Native();
#else
return 0;
#endif
}
internal static int NWB_UpdateWindowList(string windowsJson)
{
#if UNITY_EDITOR_WIN || UNITY_EDITOR_OSX
return NWB_UpdateWindowList_Native(windowsJson);
#else
return 0;
#endif
}
internal static void NWB_SetUnityPid(int pid)
{
#if UNITY_EDITOR_WIN || UNITY_EDITOR_OSX
NWB_SetUnityPid_Native(pid);
#endif
}
internal static int NWB_GetWindowListJson(byte[] buffer, int bufferCapacity, out int outBytes)
{
#if UNITY_EDITOR_WIN || UNITY_EDITOR_OSX
return NWB_GetWindowListJson_Native(buffer, bufferCapacity, out outBytes);
#else
outBytes = 0;
return 0;
#endif
}
internal static int NWB_GetStreamStatusJson(byte[] buffer, int bufferCapacity, out int outBytes)
{
#if UNITY_EDITOR_WIN || UNITY_EDITOR_OSX
return NWB_GetStreamStatusJson_Native(buffer, bufferCapacity, out outBytes);
#else
outBytes = 0;
return 0;
#endif
}
internal static int NWB_StartOffscreenCapture(int fps, int width, int height)
{
#if UNITY_EDITOR_WIN || UNITY_EDITOR_OSX
return NWB_StartOffscreenCapture_Native(fps, width, height);
#else
return 0;
#endif
}
internal static void NWB_StopCapture()
{
#if UNITY_EDITOR_WIN || UNITY_EDITOR_OSX
NWB_StopCapture_Native();
#endif
}
internal static int NWB_PushFrame(IntPtr bgraData, int width, int height, int stride)
{
#if UNITY_EDITOR_WIN || UNITY_EDITOR_OSX
return NWB_PushFrame_Native(bgraData, width, height, stride);
#else
return 0;
#endif
}
internal static int NWB_GetPendingInput(byte[] buffer, int bufferSize)
{
#if UNITY_EDITOR_WIN || UNITY_EDITOR_OSX
return NWB_GetPendingInput_Native(buffer, bufferSize);
#else
return 0;
#endif
}
internal static int NWB_GetPendingOffscreenRequest(
byte[] windowTypeBuf, int bufSize, out int outFps, out int outWidth, out int outHeight, out float outDpr)
{
#if UNITY_EDITOR_WIN || UNITY_EDITOR_OSX
return NWB_GetPendingOffscreenRequest_Native(windowTypeBuf, bufSize, out outFps, out outWidth, out outHeight, out outDpr);
#else
outFps = 0;
outWidth = 0;
outHeight = 0;
outDpr = 0f;
return 0;
#endif
}
internal static int NWB_GetPendingCompositeRequest(
byte[] jsonBuf, int bufSize, out int outFps, out int outWidth, out int outHeight, out float outDpr)
{
#if UNITY_EDITOR_WIN || UNITY_EDITOR_OSX
return NWB_GetPendingCompositeRequest_Native(jsonBuf, bufSize, out outFps, out outWidth, out outHeight, out outDpr);
#else
outFps = 0;
outWidth = 0;
outHeight = 0;
outDpr = 0f;
return 0;
#endif
}
internal static int NWB_IsOffscreenActive()
{
#if UNITY_EDITOR_WIN || UNITY_EDITOR_OSX
return NWB_IsOffscreenActive_Native();
#else
return 0;
#endif
}
internal static int NWB_GetPendingResize(out int outWidth, out int outHeight, out float outDpr)
{
#if UNITY_EDITOR_WIN || UNITY_EDITOR_OSX
return NWB_GetPendingResize_Native(out outWidth, out outHeight, out outDpr);
#else
outWidth = 0;
outHeight = 0;
outDpr = 0f;
return 0;
#endif
}
internal static int NWB_GetActiveOffscreenWindowType(byte[] buffer, int bufferSize)
{
#if UNITY_EDITOR_WIN || UNITY_EDITOR_OSX
return NWB_GetActiveOffscreenWindowType_Native(buffer, bufferSize);
#else
return 0;
#endif
}
internal static int NWB_SendDataChannelMessage(byte[] jsonUtf8, int length)
{
#if UNITY_EDITOR_WIN || UNITY_EDITOR_OSX
return NWB_SendDataChannelMessage_Native(jsonUtf8, length);
#else
return 0;
#endif
}
internal static float NWB_GetSecondsSinceLastHeartbeat()
{
#if UNITY_EDITOR_WIN || UNITY_EDITOR_OSX
return NWB_GetSecondsSinceLastHeartbeat_Native();
#else
return -1f;
#endif
}
internal static void NWB_SetLogCallback(NWB_LogCallbackDelegate callback)
{
#if UNITY_EDITOR_WIN || UNITY_EDITOR_OSX
NWB_SetLogCallback_Native(callback);
#endif
}
}
}