Skip to content

Commit b284c16

Browse files
authored
Merge pull request #148 from playroomkit/openExternalLink
Open External link
2 parents 8e32e75 + ff3ace7 commit b284c16

File tree

9 files changed

+81
-4
lines changed

9 files changed

+81
-4
lines changed

Assets/PlayroomKit/PlayroomKit.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,12 @@ public void OpenDiscordInviteDialog(Action callback = null)
355355
_playroomService.OpenDiscordInviteDialog(callback);
356356
}
357357

358+
public void OpenDiscordExternalLink(string url, Action<string> callback = null)
359+
{
360+
CheckPlayRoomInitialized();
361+
_playroomService.OpenDiscordExternalLink(url, callback);
362+
}
363+
358364
public void StartDiscordPurchase(string skuId, Action<string> responseCallback, Action<string> onError = null)
359365
{
360366
CheckPlayRoomInitialized();

Assets/PlayroomKit/modules/Headers.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,9 @@ private static extern string GetPersistentDataInternal(string key,
170170
[DllImport("__Internal")]
171171
private static extern void OpenDiscordInviteDialogInternal(Action callback = null);
172172

173+
[DllImport("__Internal")]
174+
private static extern void OpenDiscordExternalLinkInternal(string url, Action<string> callback = null);
175+
173176
[DllImport("__Internal")]
174177
private static extern void StartDiscordPurchaseInternal(string skuId, Action<string, string> callback, Action<string> onError = null);
175178

Assets/PlayroomKit/modules/Helpers/CallbackManager.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,17 @@ public static void InvokeCallback(string key, TurnData turnData)
101101
$"Callback with key {key} is of unsupported type or incorrect number of arguments: {turnData}!");
102102
}
103103
}
104+
105+
public static void InvokeCallback(string key, bool someBool)
106+
{
107+
if (callbacks.TryGetValue(key, out Delegate callback))
108+
{
109+
if (callback is Action<bool> action) action?.Invoke(someBool);
110+
else
111+
Debug.LogError(
112+
$"Callback with key {key} is of unsupported type or incorrect number of arguments: {someBool}!");
113+
}
114+
}
104115

105116

106117

Assets/PlayroomKit/modules/Interfaces/IPlayroomBase.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ public void InsertCoin(InitOptions options = null, Action onLaunchCallBack = nul
7373

7474
#region Discord
7575
public void OpenDiscordInviteDialog(Action callback = null);
76+
public void OpenDiscordExternalLink(string url, Action<string> callback = null);
7677
public void StartDiscordPurchase(string skuId, Action<string> callback, Action<string> onError = null);
7778
public void GetDiscordSkus(Action<List<DiscordSku>> callback);
7879
public void GetDiscordEntitlements(Action<List<DiscordEntitlement>> callback);

Assets/PlayroomKit/modules/MockMode/BrowserMode/BrowserMockService.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -348,6 +348,12 @@ public void SubscribeDiscordEvent(SDKEvent eventName, Action<string> callback)
348348
{
349349
DebugLogger.LogWarning("[MockMode] Discord events only work inside discord!");
350350
}
351+
352+
public void OpenDiscordExternalLink(string url, Action<string> callback = null)
353+
{
354+
DebugLogger.LogWarning("[MockMode] Discord external link is currently not supported in browser mock mode!");
355+
callback?.Invoke("true");
356+
}
351357
#endregion
352358
}
353359
#endif

Assets/PlayroomKit/modules/MockMode/LocalPlayroomService.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -248,6 +248,12 @@ public void SubscribeDiscordEvent(SDKEvent eventName, Action<string> callback)
248248
{
249249
DebugLogger.LogWarning("[MockMode] Discord events only work inside discord!");
250250
}
251+
252+
public void OpenDiscordExternalLink(string url, Action<string> callback = null)
253+
{
254+
DebugLogger.LogWarning("[MockMode] Discord external link is currently not supported in local mode!");
255+
callback?.Invoke("true");
256+
}
251257
#endregion
252258
}
253259
}

Assets/PlayroomKit/modules/PlayroomBuildService.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -440,6 +440,19 @@ public void OpenDiscordInviteDialog(Action callback = null)
440440
_interop.OpenDiscordInviteDialogInternalWrapper(OpenDiscordInviteDialogCallbackInvoker);
441441
}
442442

443+
public void OpenDiscordExternalLink(string url, Action<string> callback = null)
444+
{
445+
CheckPlayRoomInitialized();
446+
CallbackManager.RegisterCallback(callback, "discordExternalLink");
447+
OpenDiscordExternalLinkInternal(url, InvokeOpenDiscordExternalLinkCallback);
448+
}
449+
450+
[MonoPInvokeCallback(typeof(Action<string>))]
451+
private static void InvokeOpenDiscordExternalLinkCallback(string openedString)
452+
{
453+
CallbackManager.InvokeCallback("discordExternalLink", openedString);
454+
}
455+
443456
[MonoPInvokeCallback(typeof(Action<string, string>))]
444457
private static void StartDiscordPurchaseCallback(string skuId, string result)
445458
{
@@ -457,7 +470,7 @@ public void StartDiscordPurchase(string skuId, Action<string> callback = null, A
457470
CheckPlayRoomInitialized();
458471
CallbackManager.RegisterCallback(callback, skuId);
459472
CallbackManager.RegisterCallback(onError, "onError");
460-
473+
461474
StartDiscordPurchaseInternal(skuId, StartDiscordPurchaseCallback, OnErrorStartPurchase);
462475
}
463476

Assets/PlayroomKit/src/index.js

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1110,7 +1110,29 @@ mergeInto(LibraryManager.library, {
11101110
{{{ makeDynCall('v', 'callback') }}}()
11111111
})
11121112
.catch((error) => {
1113-
console.error("Failed to open Discord invite dialog:", error);
1113+
console.error("[JSLIB] Failed to open Discord invite dialog:", error);
1114+
});
1115+
},
1116+
1117+
OpenDiscordExternalLinkInternal: function (url, callback) {
1118+
if (!window.Playroom) {
1119+
console.error(
1120+
"Playroom library is not loaded. Please make sure to call InsertCoin first."
1121+
);
1122+
return;
1123+
}
1124+
1125+
Playroom.getDiscordClient().commands.openExternalLink({url: UTF8ToString(url)})
1126+
.then((opened) => {
1127+
if (opened == null) {
1128+
opened = ""
1129+
}
1130+
1131+
var returnData = _ConvertString(JSON.stringify(opened));
1132+
{{{ makeDynCall('vi', 'callback') }}}(returnData)
1133+
})
1134+
.catch((error) => {
1135+
console.error("[JSLIB] Failed to open external link:", error);
11141136
});
11151137
},
11161138

Assets/Scripts/GameManager.cs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -207,10 +207,19 @@ private void Update()
207207

208208
if (Input.GetKeyDown(KeyCode.Z))
209209
{
210-
string nullString = null;
211-
int length = nullString.Length; // This will throw a NullReferenceException
210+
playroomKit.OpenDiscordExternalLink("https://github.com/momintlh", (success) =>
211+
{
212+
text.text = success;
213+
});
212214
}
213215

216+
if (Input.GetKeyDown(KeyCode.I))
217+
{
218+
playroomKit.OpenDiscordExternalLink("https://discord.gg/9s5jfcgQ6P", (success) =>
219+
{
220+
text.text = success;
221+
});
222+
}
214223

215224
}
216225
#endregion

0 commit comments

Comments
 (0)