Files
UnrealEngine/Engine/Source/Developer/Android/AndroidZenServerPlugin/AndroidPortForwarder/ZenServerAdapter.cs
2025-05-18 13:04:45 +08:00

57 lines
1.4 KiB
C#

// Copyright Epic Games, Inc. All Rights Reserved.
namespace AndroidZenServerPlugin;
using System.Runtime.InteropServices;
public static class ZenServerAdapter
{
private static ConsoleRedirector? ConsoleRedirector;
private static AndroidPortForwarder? AndroidPortForwarder;
[UnmanagedCallersOnly(EntryPoint = "StartAndroidPortForwarder")]
private static unsafe void StartAndroidPortForwarder(delegate*<void*, int, char*, void> LogCallback, void* UsrPtr, IntPtr ADBExecutablePtr, uint Port)
{
ConsoleRedirector?.Dispose();
ConsoleRedirector = new ConsoleRedirector((Level, Line) =>
{
IntPtr LinePtr = Marshal.StringToHGlobalAnsi(Line);
try
{
LogCallback(UsrPtr, LogLevelToInt(Level), (char*)LinePtr);
}
finally
{
Marshal.FreeHGlobal(LinePtr);
}
});
string ADBExecutable = Marshal.PtrToStringAnsi(ADBExecutablePtr) ?? string.Empty;
AndroidPortForwarder?.Dispose();
AndroidPortForwarder = new AndroidPortForwarder();
AndroidPortForwarder.StartMonitor(ADBExecutable, Port);
}
[UnmanagedCallersOnly(EntryPoint = "StopAndroidPortForwarder")]
private static void StopAndroidPortForwarder()
{
AndroidPortForwarder?.Dispose();
AndroidPortForwarder = null;
ConsoleRedirector?.Dispose();
ConsoleRedirector = null;
}
private static int LogLevelToInt(ConsoleRedirector.LogLevel Level)
{
return Level switch
{
ConsoleRedirector.LogLevel.Info => 0,
ConsoleRedirector.LogLevel.Error => 1,
_ => 0
};
}
}