discord-rpc/examples/button-clicker/Assets/DiscordRpc.cs

87 lines
3.2 KiB
C#
Raw Normal View History

using System.Runtime.InteropServices;
public class DiscordRpc
{
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void ReadyCallback();
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void DisconnectedCallback(int errorCode, string message);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void ErrorCallback(int errorCode, string message);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void JoinCallback(string secret);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void SpectateCallback(string secret);
2017-10-14 11:21:35 +01:00
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
public delegate void RequestCallback(JoinRequest request);
2017-10-14 11:12:03 +01:00
2017-10-14 11:21:35 +01:00
public struct EventHandlers
{
public ReadyCallback readyCallback;
public DisconnectedCallback disconnectedCallback;
public ErrorCallback errorCallback;
public JoinCallback joinCallback;
public SpectateCallback spectateCallback;
2017-10-14 11:21:35 +01:00
public RequestCallback requestCallback;
}
[System.Serializable]
public struct RichPresence
{
public string state; /* max 128 bytes */
public string details; /* max 128 bytes */
public long startTimestamp;
public long endTimestamp;
public string largeImageKey; /* max 32 bytes */
public string largeImageText; /* max 128 bytes */
public string smallImageKey; /* max 32 bytes */
public string smallImageText; /* max 128 bytes */
public string partyId; /* max 128 bytes */
public int partySize;
public int partyMax;
public string matchSecret; /* max 128 bytes */
public string joinSecret; /* max 128 bytes */
public string spectateSecret; /* max 128 bytes */
public bool instance;
}
2017-10-14 11:21:35 +01:00
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
public struct JoinRequest
{
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 24)]
public string userId;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 48)]
public string username;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 128)]
2017-10-17 21:33:12 +01:00
public string avatar;
2017-10-14 11:21:35 +01:00
}
public enum Reply
{
No = 0,
Yes = 1,
Ignore = 2
}
2017-10-14 11:12:03 +01:00
[DllImport("discord-rpc", EntryPoint = "Discord_Initialize", CallingConvention = CallingConvention.Cdecl)]
public static extern void Initialize(string applicationId, ref EventHandlers handlers, bool autoRegister, string optionalSteamId);
[DllImport("discord-rpc", EntryPoint = "Discord_Shutdown", CallingConvention = CallingConvention.Cdecl)]
public static extern void Shutdown();
[DllImport("discord-rpc", EntryPoint = "Discord_RunCallbacks", CallingConvention = CallingConvention.Cdecl)]
public static extern void RunCallbacks();
[DllImport("discord-rpc", EntryPoint = "Discord_UpdatePresence", CallingConvention = CallingConvention.Cdecl)]
public static extern void UpdatePresence(ref RichPresence presence);
2017-10-14 11:12:03 +01:00
2017-10-14 11:21:35 +01:00
[DllImport("discord-rpc", EntryPoint = "Discord_Respond", CallingConvention = CallingConvention.Cdecl)]
public static extern void Respond(string userId, Reply reply);
}