Initial il2cpp support attempts

This commit is contained in:
msciotti 2018-11-02 13:47:50 -07:00
parent d63ed30966
commit bc22841700
No known key found for this signature in database
GPG Key ID: 40FADA25CF0EAD84
2 changed files with 127 additions and 117 deletions

View File

@ -9,121 +9,124 @@ public class DiscordSpectateEvent : UnityEngine.Events.UnityEvent<string> { }
[System.Serializable] [System.Serializable]
public class DiscordJoinRequestEvent : UnityEngine.Events.UnityEvent<DiscordRpc.DiscordUser> { } public class DiscordJoinRequestEvent : UnityEngine.Events.UnityEvent<DiscordRpc.DiscordUser> { }
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 class DiscordController : MonoBehaviour
{ {
public DiscordRpc.RichPresence presence = new DiscordRpc.RichPresence(); public DiscordRpc.RichPresence presence = new DiscordRpc.RichPresence();
public string applicationId; public string applicationId;
public string optionalSteamId; public string optionalSteamId;
public int callbackCalls; public int clickCounter;
public int clickCounter; public DiscordJoinEvent onJoin;
public DiscordRpc.DiscordUser joinRequest; public DiscordJoinEvent onSpectate;
public UnityEngine.Events.UnityEvent onConnect; public DiscordJoinRequestEvent onJoinRequest;
public UnityEngine.Events.UnityEvent onDisconnect;
public UnityEngine.Events.UnityEvent hasResponded;
public DiscordJoinEvent onJoin;
public DiscordJoinEvent onSpectate;
public DiscordJoinRequestEvent onJoinRequest;
DiscordRpc.EventHandlers handlers; DiscordRpc.EventHandlers handlers;
public void OnClick() public void OnClick()
{ {
Debug.Log("Discord: on click!"); Debug.Log("Discord: on click!");
clickCounter++; 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() public static void ReadyCallback(ref DiscordRpc.DiscordUser connectedUser)
{ {
Debug.Log("Discord: responding yes to Ask to Join request"); Debug.Log(string.Format("Discord: connected to {0}#{1}: {2}", connectedUser.username, connectedUser.discriminator, connectedUser.userId));
DiscordRpc.Respond(joinRequest.userId, DiscordRpc.Reply.Yes); // GameManager.Instance.onConnect.Invoke();
hasResponded.Invoke(); }
}
public void RequestRespondNo() public static void DisconnectedCallback(int errorCode, string message)
{ {
Debug.Log("Discord: responding no to Ask to Join request"); Debug.Log(string.Format("Discord: disconnect {0}: {1}", errorCode, message));
DiscordRpc.Respond(joinRequest.userId, DiscordRpc.Reply.No); // onDisconnect.Invoke();
hasResponded.Invoke(); }
}
public void ReadyCallback(ref DiscordRpc.DiscordUser connectedUser) public static void ErrorCallback(int errorCode, string message)
{ {
++callbackCalls; Debug.Log(string.Format("Discord: error {0}: {1}", errorCode, message));
Debug.Log(string.Format("Discord: connected to {0}#{1}: {2}", connectedUser.username, connectedUser.discriminator, connectedUser.userId)); }
onConnect.Invoke();
}
public void DisconnectedCallback(int errorCode, string message) public static void JoinCallback(string secret)
{ {
++callbackCalls; Debug.Log(string.Format("Discord: join ({0})", secret));
Debug.Log(string.Format("Discord: disconnect {0}: {1}", errorCode, message)); // onJoin.Invoke(secret);
onDisconnect.Invoke(); }
}
public void ErrorCallback(int errorCode, string message) public static void SpectateCallback(string secret)
{ {
++callbackCalls; Debug.Log(string.Format("Discord: spectate ({0})", secret));
Debug.Log(string.Format("Discord: error {0}: {1}", errorCode, message)); // onSpectate.Invoke(secret);
} }
public void JoinCallback(string secret) public static void RequestCallback(ref DiscordRpc.DiscordUser request)
{ {
++callbackCalls; Debug.Log(string.Format("Discord: join request {0}#{1}: {2}", request.username, request.discriminator, request.userId));
Debug.Log(string.Format("Discord: join ({0})", secret)); GameManager.Instance.joinRequest = request;
onJoin.Invoke(secret); // onJoinRequest.Invoke(request);
} }
public void SpectateCallback(string secret) void Start()
{ {
++callbackCalls; }
Debug.Log(string.Format("Discord: spectate ({0})", secret));
onSpectate.Invoke(secret);
}
public void RequestCallback(ref DiscordRpc.DiscordUser request) void Update()
{ {
++callbackCalls; DiscordRpc.RunCallbacks();
Debug.Log(string.Format("Discord: join request {0}#{1}: {2}", request.username, request.discriminator, request.userId)); }
joinRequest = request;
onJoinRequest.Invoke(request);
}
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() void OnDisable()
{ {
DiscordRpc.RunCallbacks(); Debug.Log("Discord: shutdown");
} DiscordRpc.Shutdown();
}
void OnEnable() void OnDestroy()
{ {
Debug.Log("Discord: init");
callbackCalls = 0;
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()
{
}
} }

View File

@ -2,35 +2,42 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Text; using System.Text;
using AOT;
public class DiscordRpc public class DiscordRpc
{ {
[UnmanagedFunctionPointer(CallingConvention.Cdecl)] [MonoPInvokeCallback(typeof(OnReadyInfo))]
public delegate void ReadyCallback(ref DiscordUser connectedUser); public static void ReadyCallback(ref DiscordUser user){}
public delegate void OnReadyInfo(ref DiscordUser connectedUser);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)] [MonoPInvokeCallback(typeof(OnDisconnectedInfo))]
public delegate void DisconnectedCallback(int errorCode, string message); public static void DisconnectedCallback(int errorCode, string message){}
public delegate void OnDisconnectedInfo(int errorCode, string message);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)] [MonoPInvokeCallback(typeof(OnErrorInfo))]
public delegate void ErrorCallback(int errorCode, string message); public static void ErrorCallback(int errorCode, string message){}
public delegate void OnErrorInfo(int errorCode, string message);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)] [MonoPInvokeCallback(typeof(OnJoinInfo))]
public delegate void JoinCallback(string secret); public static void JoinCallback(string secret){}
public delegate void OnJoinInfo(string secret);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)] [MonoPInvokeCallback(typeof(OnSpectateInfo))]
public delegate void SpectateCallback(string secret); public static void SpectateCallback(string secret){}
public delegate void OnSpectateInfo(string secret);
[UnmanagedFunctionPointer(CallingConvention.Cdecl)] [MonoPInvokeCallback(typeof(OnRequestInfo))]
public delegate void RequestCallback(ref DiscordUser request); public static void RequestCallback(ref DiscordUser request){}
public delegate void OnRequestInfo(ref DiscordUser request);
public struct EventHandlers public struct EventHandlers
{ {
public ReadyCallback readyCallback; public OnReadyInfo readyCallback;
public DisconnectedCallback disconnectedCallback; public OnDisconnectedInfo disconnectedCallback;
public ErrorCallback errorCallback; public OnErrorInfo errorCallback;
public JoinCallback joinCallback; public OnJoinInfo joinCallback;
public SpectateCallback spectateCallback; public OnSpectateInfo spectateCallback;
public RequestCallback requestCallback; public OnRequestInfo requestCallback;
} }
[Serializable, StructLayout(LayoutKind.Sequential)] [Serializable, StructLayout(LayoutKind.Sequential)]