Mesen2/UI/Interop/NetplayApi.cs
2023-01-25 16:03:56 -05:00

45 lines
1.8 KiB
C#

using Mesen.Config;
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
namespace Mesen.Interop
{
public class NetplayApi
{
private const string DllPath = EmuApi.DllName;
[DllImport(DllPath)] public static extern void StartServer(UInt16 port, [MarshalAs(UnmanagedType.LPUTF8Str)]string password);
[DllImport(DllPath)] public static extern void StopServer();
[DllImport(DllPath)] [return: MarshalAs(UnmanagedType.I1)] public static extern bool IsServerRunning();
[DllImport(DllPath)] public static extern void Connect([MarshalAs(UnmanagedType.LPUTF8Str)]string host, UInt16 port, [MarshalAs(UnmanagedType.LPUTF8Str)]string password, [MarshalAs(UnmanagedType.I1)]bool spectator);
[DllImport(DllPath)] public static extern void Disconnect();
[DllImport(DllPath)] [return: MarshalAs(UnmanagedType.I1)] public static extern bool IsConnected();
[DllImport(DllPath)] private static extern void NetPlayGetControllerList([In,Out] NetplayControllerUsageInfo[] controllers, ref Int32 length);
public static NetplayControllerUsageInfo[] NetPlayGetControllerList()
{
NetplayControllerUsageInfo[] controllers = new NetplayControllerUsageInfo[16];
int length = 16;
NetplayApi.NetPlayGetControllerList(controllers, ref length);
Array.Resize(ref controllers, length);
return controllers;
}
[DllImport(DllPath)] public static extern void NetPlaySelectController(NetplayControllerInfo controllerPort);
[DllImport(DllPath)] public static extern NetplayControllerInfo NetPlayGetControllerPort();
}
public struct NetplayControllerInfo
{
public byte Port;
public byte SubPort;
}
public struct NetplayControllerUsageInfo
{
public NetplayControllerInfo Port;
public ControllerType Type;
[MarshalAs(UnmanagedType.I1)] public bool InUse;
}
}