diff --git a/examples/button-clicker/Assets/DiscordController.cs b/examples/button-clicker/Assets/DiscordController.cs index 182d31d..66554f0 100644 --- a/examples/button-clicker/Assets/DiscordController.cs +++ b/examples/button-clicker/Assets/DiscordController.cs @@ -9,121 +9,124 @@ public class DiscordSpectateEvent : UnityEngine.Events.UnityEvent { } [System.Serializable] public class DiscordJoinRequestEvent : UnityEngine.Events.UnityEvent { } +public class GameManager { + private static GameManager instance = null; + public static GameManager Instance { + get + { + if (instance == null) + { + instance = new GameManager(); + } + return instance; + } + } + public UnityEngine.Events.UnityEvent onConnect; + public UnityEngine.Events.UnityEvent onDisconnect; + public UnityEngine.Events.UnityEvent hasResponded; + public DiscordRpc.DiscordUser joinRequest; +} + public class DiscordController : MonoBehaviour { - public DiscordRpc.RichPresence presence = new DiscordRpc.RichPresence(); - public string applicationId; - public string optionalSteamId; - public int callbackCalls; - public int clickCounter; - public DiscordRpc.DiscordUser joinRequest; - public UnityEngine.Events.UnityEvent onConnect; - public UnityEngine.Events.UnityEvent onDisconnect; - public UnityEngine.Events.UnityEvent hasResponded; - public DiscordJoinEvent onJoin; - public DiscordJoinEvent onSpectate; - public DiscordJoinRequestEvent onJoinRequest; + public DiscordRpc.RichPresence presence = new DiscordRpc.RichPresence(); + public string applicationId; + public string optionalSteamId; + public int clickCounter; + public DiscordJoinEvent onJoin; + public DiscordJoinEvent onSpectate; + public DiscordJoinRequestEvent onJoinRequest; - DiscordRpc.EventHandlers handlers; + DiscordRpc.EventHandlers handlers; - public void OnClick() - { - Debug.Log("Discord: on click!"); - clickCounter++; + public void OnClick() + { + Debug.Log("Discord: on click!"); + clickCounter++; + presence.details = string.Format("Button clicked {0} times", clickCounter); + DiscordRpc.UpdatePresence(presence); + } - presence.details = string.Format("Button clicked {0} times", clickCounter); + public static void RequestRespondYes() + { + Debug.Log("Discord: responding yes to Ask to Join request"); + DiscordRpc.Respond(GameManager.Instance.joinRequest.userId, DiscordRpc.Reply.Yes); + // hasResponded.Invoke(); + } - DiscordRpc.UpdatePresence(presence); - } + public static void RequestRespondNo() + { + Debug.Log("Discord: responding no to Ask to Join request"); + DiscordRpc.Respond(GameManager.Instance.joinRequest.userId, DiscordRpc.Reply.No); + // hasResponded.Invoke(); + } - public void RequestRespondYes() - { - Debug.Log("Discord: responding yes to Ask to Join request"); - DiscordRpc.Respond(joinRequest.userId, DiscordRpc.Reply.Yes); - hasResponded.Invoke(); - } + public static void ReadyCallback(ref DiscordRpc.DiscordUser connectedUser) + { + Debug.Log(string.Format("Discord: connected to {0}#{1}: {2}", connectedUser.username, connectedUser.discriminator, connectedUser.userId)); + // GameManager.Instance.onConnect.Invoke(); + } - public void RequestRespondNo() - { - Debug.Log("Discord: responding no to Ask to Join request"); - DiscordRpc.Respond(joinRequest.userId, DiscordRpc.Reply.No); - hasResponded.Invoke(); - } + public static void DisconnectedCallback(int errorCode, string message) + { + Debug.Log(string.Format("Discord: disconnect {0}: {1}", errorCode, message)); + // onDisconnect.Invoke(); + } - public void ReadyCallback(ref DiscordRpc.DiscordUser connectedUser) - { - ++callbackCalls; - Debug.Log(string.Format("Discord: connected to {0}#{1}: {2}", connectedUser.username, connectedUser.discriminator, connectedUser.userId)); - onConnect.Invoke(); - } + public static void ErrorCallback(int errorCode, string message) + { + Debug.Log(string.Format("Discord: error {0}: {1}", errorCode, message)); + } - public void DisconnectedCallback(int errorCode, string message) - { - ++callbackCalls; - Debug.Log(string.Format("Discord: disconnect {0}: {1}", errorCode, message)); - onDisconnect.Invoke(); - } + public static void JoinCallback(string secret) + { + Debug.Log(string.Format("Discord: join ({0})", secret)); + // onJoin.Invoke(secret); + } - public void ErrorCallback(int errorCode, string message) - { - ++callbackCalls; - Debug.Log(string.Format("Discord: error {0}: {1}", errorCode, message)); - } + public static void SpectateCallback(string secret) + { + Debug.Log(string.Format("Discord: spectate ({0})", secret)); + // onSpectate.Invoke(secret); + } - public void JoinCallback(string secret) - { - ++callbackCalls; - Debug.Log(string.Format("Discord: join ({0})", secret)); - onJoin.Invoke(secret); - } + public static void RequestCallback(ref DiscordRpc.DiscordUser request) + { + Debug.Log(string.Format("Discord: join request {0}#{1}: {2}", request.username, request.discriminator, request.userId)); + GameManager.Instance.joinRequest = request; + // onJoinRequest.Invoke(request); + } - public void SpectateCallback(string secret) - { - ++callbackCalls; - Debug.Log(string.Format("Discord: spectate ({0})", secret)); - onSpectate.Invoke(secret); - } + void Start() + { + } - public void RequestCallback(ref DiscordRpc.DiscordUser request) - { - ++callbackCalls; - Debug.Log(string.Format("Discord: join request {0}#{1}: {2}", request.username, request.discriminator, request.userId)); - joinRequest = request; - onJoinRequest.Invoke(request); - } + void Update() + { + DiscordRpc.RunCallbacks(); + } - void Start() - { - } + void OnEnable() + { + Debug.Log("Discord: init"); + handlers = new DiscordRpc.EventHandlers(); + handlers.readyCallback += ReadyCallback; + handlers.disconnectedCallback += DisconnectedCallback; + handlers.errorCallback += ErrorCallback; + handlers.joinCallback += JoinCallback; + handlers.spectateCallback += SpectateCallback; + handlers.requestCallback += RequestCallback; + DiscordRpc.Initialize(applicationId, ref handlers, true, optionalSteamId); + } - void Update() - { - DiscordRpc.RunCallbacks(); - } + void OnDisable() + { + Debug.Log("Discord: shutdown"); + DiscordRpc.Shutdown(); + } - void OnEnable() - { - Debug.Log("Discord: init"); - callbackCalls = 0; + void OnDestroy() + { - handlers = new DiscordRpc.EventHandlers(); - handlers.readyCallback = ReadyCallback; - handlers.disconnectedCallback += DisconnectedCallback; - handlers.errorCallback += ErrorCallback; - handlers.joinCallback += JoinCallback; - handlers.spectateCallback += SpectateCallback; - handlers.requestCallback += RequestCallback; - DiscordRpc.Initialize(applicationId, ref handlers, true, optionalSteamId); - } - - void OnDisable() - { - Debug.Log("Discord: shutdown"); - DiscordRpc.Shutdown(); - } - - void OnDestroy() - { - - } + } } diff --git a/examples/button-clicker/Assets/DiscordRpc.cs b/examples/button-clicker/Assets/DiscordRpc.cs index af82c1c..936a916 100644 --- a/examples/button-clicker/Assets/DiscordRpc.cs +++ b/examples/button-clicker/Assets/DiscordRpc.cs @@ -2,35 +2,42 @@ using System.Collections.Generic; using System.Runtime.InteropServices; using System.Text; +using AOT; public class DiscordRpc { - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void ReadyCallback(ref DiscordUser connectedUser); + [MonoPInvokeCallback(typeof(OnReadyInfo))] + public static void ReadyCallback(ref DiscordUser user){} + public delegate void OnReadyInfo(ref DiscordUser connectedUser); - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void DisconnectedCallback(int errorCode, string message); + [MonoPInvokeCallback(typeof(OnDisconnectedInfo))] + public static void DisconnectedCallback(int errorCode, string message){} + public delegate void OnDisconnectedInfo(int errorCode, string message); - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void ErrorCallback(int errorCode, string message); + [MonoPInvokeCallback(typeof(OnErrorInfo))] + public static void ErrorCallback(int errorCode, string message){} + public delegate void OnErrorInfo(int errorCode, string message); - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void JoinCallback(string secret); + [MonoPInvokeCallback(typeof(OnJoinInfo))] + public static void JoinCallback(string secret){} + public delegate void OnJoinInfo(string secret); - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void SpectateCallback(string secret); + [MonoPInvokeCallback(typeof(OnSpectateInfo))] + public static void SpectateCallback(string secret){} + public delegate void OnSpectateInfo(string secret); - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] - public delegate void RequestCallback(ref DiscordUser request); + [MonoPInvokeCallback(typeof(OnRequestInfo))] + public static void RequestCallback(ref DiscordUser request){} + public delegate void OnRequestInfo(ref DiscordUser request); public struct EventHandlers { - public ReadyCallback readyCallback; - public DisconnectedCallback disconnectedCallback; - public ErrorCallback errorCallback; - public JoinCallback joinCallback; - public SpectateCallback spectateCallback; - public RequestCallback requestCallback; + public OnReadyInfo readyCallback; + public OnDisconnectedInfo disconnectedCallback; + public OnErrorInfo errorCallback; + public OnJoinInfo joinCallback; + public OnSpectateInfo spectateCallback; + public OnRequestInfo requestCallback; } [Serializable, StructLayout(LayoutKind.Sequential)]