Skip to content

Commit 8e32e75

Browse files
authored
Merge pull request #147 from playroomkit/discord-events
Discord Events
2 parents 897531a + ff4a39a commit 8e32e75

11 files changed

Lines changed: 127 additions & 45 deletions

File tree

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,3 +84,5 @@ Assets/PlayroomKit/node_modules.meta
8484
Assets/chromedriver*
8585
Assets/msedgedriver.exe
8686
Assets/msedgedriver.exe.meta
87+
Assets/PlayroomKit/src/frameworks copy.ts
88+
Assets/PlayroomKit/src/frameworks copy.ts.meta

Assets/PlayroomKit/PlayroomKit.cs

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
using System;
44
using UBB;
55
using Discord;
6+
using AOT;
67

78

89
namespace Playroom
@@ -354,10 +355,10 @@ public void OpenDiscordInviteDialog(Action callback = null)
354355
_playroomService.OpenDiscordInviteDialog(callback);
355356
}
356357

357-
public void StartDiscordPurchase(string skuId, Action<string> responseCallback = null)
358+
public void StartDiscordPurchase(string skuId, Action<string> responseCallback, Action<string> onError = null)
358359
{
359360
CheckPlayRoomInitialized();
360-
_playroomService.StartDiscordPurchase(skuId, responseCallback);
361+
_playroomService.StartDiscordPurchase(skuId, responseCallback, onError);
361362
}
362363

363364
public void GetDiscordSkus(Action<List<DiscordSku>> callback)
@@ -372,11 +373,18 @@ public void GetDiscordEntitlements(Action<List<DiscordEntitlement>> callback)
372373
_playroomService.GetDiscordEntitlements(callback);
373374
}
374375

375-
public void DiscordFormatPrice(float price, string currency, string locale, Action<string> callback)
376+
public void DiscordFormatPrice(DiscordSkuPrice price, string locale, Action<string> callback)
376377
{
377378
CheckPlayRoomInitialized();
378-
_playroomService.DiscordPriceFormat(price, currency, locale, callback);
379+
_playroomService.DiscordPriceFormat(price.Amount, price.Currency, locale, callback);
379380
}
381+
382+
public void SubscribeDiscordEvent(SDKEvent eventName, Action<string> callback)
383+
{
384+
CheckPlayRoomInitialized();
385+
_playroomService.SubscribeDiscordEvent(eventName, callback);
386+
}
387+
380388
#endregion
381389
}
382390
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
namespace Discord
2+
{
3+
public enum SDKEvent
4+
{
5+
READY,
6+
ORIENTATION_UPDATE,
7+
ENTITLEMENT_CREATE,
8+
ACTIVITY_INSTANCE_PARTICIPANTS_UPDATE,
9+
ACTIVITY_LAYOUT_MODE_UPDATE,
10+
THERMAL_STATE_UPDATE,
11+
}
12+
}

Assets/PlayroomKit/modules/Discord/SDKEvents.cs.meta

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/PlayroomKit/modules/Headers.cs

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -171,7 +171,7 @@ private static extern string GetPersistentDataInternal(string key,
171171
private static extern void OpenDiscordInviteDialogInternal(Action callback = null);
172172

173173
[DllImport("__Internal")]
174-
private static extern void StartDiscordPurchaseInternal(string skuId, Action<string, string> callback);
174+
private static extern void StartDiscordPurchaseInternal(string skuId, Action<string, string> callback, Action<string> onError = null);
175175

176176
[DllImport("__Internal")]
177177
private static extern void GetDiscordSkusInternal(Action<string> callback);
@@ -182,6 +182,8 @@ private static extern string GetPersistentDataInternal(string key,
182182
[DllImport("__Internal")]
183183
private static extern string DiscordPriceFormatInternal(float price, string currency, string locale, Action<string> callback);
184184

185+
[DllImport("__Internal")]
186+
private static extern void SubscribeDiscordInternal(string eventName, Action<string, string> callback);
185187
#endregion
186188
}
187189
}

Assets/PlayroomKit/modules/Interfaces/IPlayroomBase.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -73,10 +73,11 @@ public void InsertCoin(InitOptions options = null, Action onLaunchCallBack = nul
7373

7474
#region Discord
7575
public void OpenDiscordInviteDialog(Action callback = null);
76-
public void StartDiscordPurchase(string skuId, Action<string> callback = null);
76+
public void StartDiscordPurchase(string skuId, Action<string> callback, Action<string> onError = null);
7777
public void GetDiscordSkus(Action<List<DiscordSku>> callback);
7878
public void GetDiscordEntitlements(Action<List<DiscordEntitlement>> callback);
7979
public void DiscordPriceFormat(float price, string currency, string locale, Action<string> callback);
80+
public void SubscribeDiscordEvent(SDKEvent eventName, Action<string> callback);
8081
#endregion
8182

8283

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

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,7 @@ public void OpenDiscordInviteDialog(Action callback = null)
321321
callback?.Invoke();
322322
}
323323

324-
public void StartDiscordPurchase(string skuId, Action<string> callback = null)
324+
public void StartDiscordPurchase(string skuId, Action<string> callback, Action<string> onError = null)
325325
{
326326
DebugLogger.LogWarning("[MockMode] Discord purchase is currently not supported in browser mock mode!");
327327
}
@@ -343,6 +343,11 @@ public void DiscordPriceFormat(float price, string currency, string locale, Acti
343343
DebugLogger.LogWarning("[MockMode] Discord SKUs are currently not supported in browser mock mode!");
344344
callback?.Invoke("");
345345
}
346+
347+
public void SubscribeDiscordEvent(SDKEvent eventName, Action<string> callback)
348+
{
349+
DebugLogger.LogWarning("[MockMode] Discord events only work inside discord!");
350+
}
346351
#endregion
347352
}
348353
#endif

Assets/PlayroomKit/modules/MockMode/LocalPlayroomService.cs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ public void OpenDiscordInviteDialog(Action callback = null)
221221
callback?.Invoke();
222222
}
223223

224-
public void StartDiscordPurchase(string skuId, Action<string> callback = null)
224+
public void StartDiscordPurchase(string skuId, Action<string> callback, Action<string> onError = null)
225225
{
226226
DebugLogger.LogWarning("[MockMode] Discord purchase is currently not supported in local mode!");
227227
}
@@ -240,9 +240,14 @@ public void GetDiscordEntitlements(Action<List<DiscordEntitlement>> callback)
240240

241241
public void DiscordPriceFormat(float price, string currency, string locale, Action<string> callback)
242242
{
243-
DebugLogger.LogWarning("[MockMode] Discord SKUs are currently not supported in local mode!");
243+
DebugLogger.LogWarning("[MockMode] Discord price formatting is currently not supported in local mode!");
244244
callback?.Invoke($"${price}");
245245
}
246+
247+
public void SubscribeDiscordEvent(SDKEvent eventName, Action<string> callback)
248+
{
249+
DebugLogger.LogWarning("[MockMode] Discord events only work inside discord!");
250+
}
246251
#endregion
247252
}
248253
}

Assets/PlayroomKit/modules/PlayroomBuildService.cs

Lines changed: 24 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -441,16 +441,24 @@ public void OpenDiscordInviteDialog(Action callback = null)
441441
}
442442

443443
[MonoPInvokeCallback(typeof(Action<string, string>))]
444-
private static void DiscordPurchaseCallback(string skuId, string result)
444+
private static void StartDiscordPurchaseCallback(string skuId, string result)
445445
{
446446
CallbackManager.InvokeCallback(skuId, result);
447447
}
448448

449-
public void StartDiscordPurchase(string skuId, Action<string> callback = null)
449+
[MonoPInvokeCallback(typeof(Action<string>))]
450+
private static void OnErrorStartPurchase(string errorLog)
451+
{
452+
CallbackManager.InvokeCallback("onError", errorLog);
453+
}
454+
455+
public void StartDiscordPurchase(string skuId, Action<string> callback = null, Action<string> onError = null)
450456
{
451457
CheckPlayRoomInitialized();
452458
CallbackManager.RegisterCallback(callback, skuId);
453-
StartDiscordPurchaseInternal(skuId, DiscordPurchaseCallback);
459+
CallbackManager.RegisterCallback(onError, "onError");
460+
461+
StartDiscordPurchaseInternal(skuId, StartDiscordPurchaseCallback, OnErrorStartPurchase);
454462
}
455463

456464
public void GetDiscordSkus(Action<List<DiscordSku>> callback)
@@ -509,6 +517,18 @@ private static void DiscordPriceFormatCallbackInvoker(string formattedPrice)
509517
{
510518
CallbackManager.InvokeCallback("formattedPrice", formattedPrice);
511519
}
520+
521+
public void SubscribeDiscordEvent(SDKEvent eventName, Action<string> callback)
522+
{
523+
CallbackManager.RegisterCallback(callback, eventName.ToString());
524+
SubscribeDiscordInternal(eventName.ToString(), InvokeSubscribeDiscord);
525+
}
526+
527+
[MonoPInvokeCallback(typeof(Action<string, string>))]
528+
private static void InvokeSubscribeDiscord(string eventName, string data)
529+
{
530+
CallbackManager.InvokeCallback(eventName, data);
531+
}
512532
#endregion
513533

514534
#region Callbacks
@@ -565,6 +585,7 @@ private static void InvokeOnErrorInsertCoin(string error)
565585
_onError?.Invoke(error);
566586
Debug.LogException(new Exception(error));
567587
}
588+
568589
#endregion
569590
}
570591
}

Assets/PlayroomKit/src/index.js

Lines changed: 36 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1071,22 +1071,30 @@ mergeInto(LibraryManager.library, {
10711071
},
10721072
//#endregion
10731073

1074+
1075+
1076+
10741077
//#region Discord
1075-
// SubscribeDiscord: function () {
1076-
// if (!window.Playroom) {
1077-
// console.error(
1078-
// "Playroom library is not loaded. Please make sure to call InsertCoin first."
1079-
// );
1080-
// return 0;
1081-
// }
1082-
1083-
// Playroom.getDiscordSDK().then(discordSDK => {
1084-
// var formatted = discordSDK.subscribe();
1085-
1086-
// }).catch(err => {
1087-
// console.error("Failed to load Discord SDK:", err);
1088-
// });
1089-
// },
1078+
SubscribeDiscordInternal: function (eventNamePtr, callbackPtr) {
1079+
if (!window.Playroom) {
1080+
console.error(
1081+
"Playroom library is not loaded. Please make sure to call InsertCoin first."
1082+
);
1083+
return 0;
1084+
}
1085+
1086+
var eventName = UTF8ToString(eventNamePtr);
1087+
console.warn(`[JSLIB] Event Name: ${eventName}`)
1088+
1089+
function eventHandler(data) {
1090+
const dataJson = JSON.stringify(data);
1091+
var key = _ConvertString(eventName);
1092+
1093+
{{{ makeDynCall("vii", "callbackPtr") }}}(key, stringToNewUTF8(dataJson));
1094+
}
1095+
1096+
Playroom.getDiscordClient().subscribe(eventName, eventHandler).catch((error) => console.error(`[JSLIB]: Error in subscribe`, error));
1097+
},
10901098

10911099
OpenDiscordInviteDialogInternal: function (callback) {
10921100
if (!window.Playroom) {
@@ -1106,7 +1114,7 @@ mergeInto(LibraryManager.library, {
11061114
});
11071115
},
11081116

1109-
StartDiscordPurchaseInternal: function (skuId, callback) {
1117+
StartDiscordPurchaseInternal: function (skuId, callback, errorCallback) {
11101118
if (!window.Playroom) {
11111119
console.error(
11121120
"Playroom library is not loaded. Please make sure to call InsertCoin first."
@@ -1115,19 +1123,24 @@ mergeInto(LibraryManager.library, {
11151123
}
11161124

11171125
try {
1126+
1127+
var skuIDStr = UTF8ToString(skuId)
1128+
11181129
// startPurchase internal…
1119-
Playroom.getDiscordClient().commands.startPurchase({sku_id: UTF8ToString(skuId)}).then((response) => {
1130+
Playroom.getDiscordClient().commands.startPurchase({sku_id: skuIDStr}).then((response) => {
11201131
console.log("[JSLIB]: Purchase started successfully.");
1121-
var keyPtr = stringToNewUTF8(skuId);
1122-
var returnData = stringToNewUTF8(JSON.stringify(response));
1123-
1124-
console.log("[JSLIB]: Purchase response: ", response);
1125-
console.warn("[JSLIB]: Purchase data json: ", JSON.stringify(response));
1132+
1133+
var keyPtr = _ConvertString(skuIDStr);
11261134

1127-
{{{ makeDynCall('vii', 'callback') }}}(keyPtr, dataStrPtr);
1135+
var returnData = stringToNewUTF8(JSON.stringify(response));
1136+
{{{ makeDynCall('vii', 'callback') }}}(keyPtr, returnData);
11281137
})
11291138
.catch((error) => {
11301139
console.error("[JSLIB]: Failed to start purchase:", error);
1140+
var errorJson = JSON.stringify(error)
1141+
console.log("error: " + errorJson);
1142+
1143+
{{{ makeDynCall('vi', 'errorCallback') }}}(stringToNewUTF8(errorJson));
11311144
});
11321145
} catch (error) {
11331146
console.error("[JSLIB]: Error starting purchase:", error);

0 commit comments

Comments
 (0)