Add private player metrics and alpha.2 package
This commit is contained in:
1 parent
b4980f0acd
commit
178a6bbc85
12 files changed
+199
-14
No files matched your search
@@ -27,6 +27,7 @@ const presenceB = { userId: "pilot-b", sessionId: "b", username: "Pilot B" };
|
||||
let updatedAccount = null;
|
||||
let deletedAccount = null;
|
||||
const accountNk = {
|
||||
storageRead() { return []; },
|
||||
accountUpdateId(...args) { updatedAccount = args; },
|
||||
accountDeleteId(...args) { deletedAccount = args; }
|
||||
};
|
||||
@@ -38,6 +39,34 @@ assert.strictEqual(JSON.parse(context.rpcUpdateDisplayName({ userId: "pilot-a" }
|
||||
assert.deepStrictEqual(JSON.parse(context.rpcDeleteAccount({ userId: "pilot-a" }, logger, accountNk, "{}")), { accepted: true });
|
||||
assert.deepStrictEqual(deletedAccount, ["pilot-a", false]);
|
||||
|
||||
const metricStorage = new Map();
|
||||
let metricVersion = 0;
|
||||
const metricNk = {
|
||||
storageRead(ops) {
|
||||
return ops.map(op => metricStorage.get(`${op.collection}:${op.userId}:${op.key}`)).filter(Boolean);
|
||||
},
|
||||
storageWrite(ops) {
|
||||
for (const op of ops) {
|
||||
const storageKey = `${op.collection}:${op.userId}:${op.key}`;
|
||||
const previous = metricStorage.get(storageKey);
|
||||
if (op.version === "*" && previous) throw new Error("version conflict");
|
||||
if (op.version && op.version !== "*" && (!previous || previous.version !== op.version)) throw new Error("version conflict");
|
||||
metricVersion += 1;
|
||||
metricStorage.set(storageKey, { value: JSON.parse(JSON.stringify(op.value)), version: String(metricVersion) });
|
||||
}
|
||||
}
|
||||
};
|
||||
assert.deepStrictEqual(JSON.parse(context.rpcRecordActivity({ userId: "pilot-metric-a" }, logger, metricNk, JSON.stringify({ platform: "Windows", version: "0.1.0-alpha.2" }))), { accepted: true });
|
||||
assert.deepStrictEqual(JSON.parse(context.rpcRecordActivity({ userId: "pilot-metric-a" }, logger, metricNk, JSON.stringify({ platform: "Windows", version: "0.1.0-alpha.2" }))), { accepted: true });
|
||||
assert.deepStrictEqual(JSON.parse(context.rpcRecordActivity({ userId: "pilot-metric-b" }, logger, metricNk, JSON.stringify({ platform: "Android", version: "0.1.0-alpha.2" }))), { accepted: true });
|
||||
const privateStats = JSON.parse(context.rpcPrivateStats({}, logger, metricNk, "{}"));
|
||||
assert.strictEqual(privateStats.total_players, 2);
|
||||
assert.strictEqual(privateStats.platforms.windows, 1);
|
||||
assert.strictEqual(privateStats.platforms.android, 1);
|
||||
assert.strictEqual(privateStats.versions["0.1.0-alpha.2"], 2);
|
||||
assert.strictEqual(privateStats.daily_active[context.utcDay(Date.now())], 2);
|
||||
assert.throws(() => context.rpcPrivateStats({ userId: "pilot-a" }, logger, metricNk, "{}"), /server-to-server/);
|
||||
|
||||
let leaderboardWrite = null;
|
||||
const leaderboardNk = {
|
||||
accountGetId() { return { user: { displayName: "Kommandant Ägir" } }; },
|
||||
|
||||
Reference in new issue
Block a user