Files
2026-02-21 16:45:37 +08:00

156 lines
4.9 KiB
C#

using System;
using System.Text;
using Viveport.Internal;
namespace Viveport
{
public class Deeplink
{
private const int MaxIdLength = 256;
private static Viveport.Internal.StatusCallback isReadyIl2cppCallback;
private static Viveport.Internal.StatusCallback2 goToAppIl2cppCallback;
private static Viveport.Internal.StatusCallback2 goToAppWithBranchNameIl2cppCallback;
private static Viveport.Internal.StatusCallback2 goToStoreIl2cppCallback;
private static Viveport.Internal.StatusCallback2 goToAppOrGoToStoreIl2cppCallback;
[MonoPInvokeCallback(typeof(Viveport.Internal.StatusCallback))]
private static void IsReadyIl2cppCallback(int errorCode)
{
isReadyIl2cppCallback(errorCode);
}
public static void IsReady(StatusCallback callback)
{
if (callback == null)
{
throw new InvalidOperationException("callback == null");
}
isReadyIl2cppCallback = callback.Invoke;
Api.InternalStatusCallbacks.Add(IsReadyIl2cppCallback);
if (IntPtr.Size == 8)
{
Viveport.Internal.Deeplink.IsReady_64(IsReadyIl2cppCallback);
}
else
{
Viveport.Internal.Deeplink.IsReady(IsReadyIl2cppCallback);
}
}
[MonoPInvokeCallback(typeof(Viveport.Internal.StatusCallback2))]
private static void GoToAppIl2cppCallback(int errorCode, string message)
{
goToAppIl2cppCallback(errorCode, message);
}
public static void GoToApp(StatusCallback2 callback, string viveportId, string launchData)
{
if (callback == null || string.IsNullOrEmpty(viveportId) || string.IsNullOrEmpty(launchData))
{
throw new InvalidOperationException("callback == null || string.IsNullOrEmpty(viveportId) || string.IsNullOrEmpty(launchData)");
}
goToAppIl2cppCallback = callback.Invoke;
Api.InternalStatusCallback2s.Add(GoToAppIl2cppCallback);
if (IntPtr.Size == 8)
{
Viveport.Internal.Deeplink.GoToApp_64(goToAppIl2cppCallback, viveportId, launchData);
}
else
{
Viveport.Internal.Deeplink.GoToApp(goToAppIl2cppCallback, viveportId, launchData);
}
}
[MonoPInvokeCallback(typeof(Viveport.Internal.StatusCallback2))]
private static void GoToAppWithBranchNameIl2cppCallback(int errorCode, string message)
{
goToAppWithBranchNameIl2cppCallback(errorCode, message);
}
public static void GoToApp(StatusCallback2 callback, string viveportId, string launchData, string branchName)
{
if (callback == null || string.IsNullOrEmpty(viveportId) || string.IsNullOrEmpty(launchData))
{
throw new InvalidOperationException("callback == null || string.IsNullOrEmpty(viveportId) || string.IsNullOrEmpty(launchData)");
}
goToAppWithBranchNameIl2cppCallback = callback.Invoke;
Api.InternalStatusCallback2s.Add(GoToAppWithBranchNameIl2cppCallback);
if (IntPtr.Size == 8)
{
Viveport.Internal.Deeplink.GoToApp_64(goToAppIl2cppCallback, viveportId, launchData, branchName);
}
else
{
Viveport.Internal.Deeplink.GoToApp(goToAppIl2cppCallback, viveportId, launchData, branchName);
}
}
[MonoPInvokeCallback(typeof(Viveport.Internal.StatusCallback2))]
private static void GoToStoreIl2cppCallback(int errorCode, string message)
{
goToStoreIl2cppCallback(errorCode, message);
}
public static void GoToStore(StatusCallback2 callback, string viveportId = "")
{
if (callback == null)
{
throw new InvalidOperationException("callback == null || string.IsNullOrEmpty(viveportId)");
}
goToStoreIl2cppCallback = callback.Invoke;
Api.InternalStatusCallback2s.Add(GoToStoreIl2cppCallback);
if (IntPtr.Size == 8)
{
Viveport.Internal.Deeplink.GoToStore_64(goToStoreIl2cppCallback, viveportId);
}
else
{
Viveport.Internal.Deeplink.GoToStore(goToStoreIl2cppCallback, viveportId);
}
}
[MonoPInvokeCallback(typeof(Viveport.Internal.StatusCallback2))]
private static void GoToAppOrGoToStoreIl2cppCallback(int errorCode, string message)
{
goToAppOrGoToStoreIl2cppCallback(errorCode, message);
}
public static void GoToAppOrGoToStore(StatusCallback2 callback, string viveportId, string launchData)
{
if (callback == null || string.IsNullOrEmpty(viveportId) || string.IsNullOrEmpty(launchData))
{
throw new InvalidOperationException("callback == null || string.IsNullOrEmpty(viveportId) || string.IsNullOrEmpty(launchData)");
}
goToAppOrGoToStoreIl2cppCallback = callback.Invoke;
Api.InternalStatusCallback2s.Add(GoToAppOrGoToStoreIl2cppCallback);
if (IntPtr.Size == 8)
{
Viveport.Internal.Deeplink.GoToAppOrGoToStore_64(goToAppOrGoToStoreIl2cppCallback, viveportId, launchData);
}
else
{
Viveport.Internal.Deeplink.GoToAppOrGoToStore(goToAppOrGoToStoreIl2cppCallback, viveportId, launchData);
}
}
public static string GetAppLaunchData()
{
StringBuilder stringBuilder = new StringBuilder(256);
if (IntPtr.Size == 8)
{
Viveport.Internal.Deeplink.GetAppLaunchData_64(stringBuilder, 256);
}
else
{
Viveport.Internal.Deeplink.GetAppLaunchData(stringBuilder, 256);
}
return stringBuilder.ToString();
}
}
}