Skip to content

Commit d778511

Browse files
committed
Add pairing data validation check at connected event
1 parent 8eb7461 commit d778511

File tree

2 files changed

+44
-1
lines changed

2 files changed

+44
-1
lines changed

src/managers/rustPlusManager.ts

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -340,6 +340,7 @@ export class RustPlusInstance {
340340
if (this.rustPlus.getAppResponseError(response) === rp.AppResponseError.NotFound) {
341341
/* pairingData is no longer valid. */
342342
if (pairingData && pairingData.valid) {
343+
log.warn(`${funcName} PairingData no longer valid for ${mainRequesterSteamId}.`, logParam);
343344
pairingData.valid = false;
344345
gim.updateGuildInstance(this.guildId);
345346
await sendServerMessage(dm, this.guildId, this.serverId, this.connectionStatus);
@@ -375,6 +376,46 @@ export class RustPlusInstance {
375376
return true;
376377
}
377378

379+
public async validatePairingData() {
380+
const funcName = `[RustPlusManager: validatePairingData]`
381+
const logParam = { guildId: this.guildId, serverId: this.serverId, serverName: this.serverName };
382+
383+
log.info(`${funcName}`, logParam);
384+
385+
const gInstance = gim.getGuildInstance(this.guildId) as GuildInstance;
386+
const pairingDataMap = gInstance.pairingDataMap[this.serverId];
387+
for (const [steamId, pairingData] of Object.entries(pairingDataMap)) {
388+
const rpInfo = await this.rustPlus.getInfoAsync(pairingData.steamId, pairingData.playerToken);
389+
if (rp.isValidAppResponse(rpInfo, log)) {
390+
if (!rp.isValidAppInfo(rpInfo.info, log)) {
391+
if (rp.isValidAppError(rpInfo.error, log)) {
392+
log.warn(`${funcName} SteamId: ${steamId}, AppError: ${rpInfo.error.error}`, logParam);
393+
if (this.rustPlus.getAppResponseError(rpInfo) === rp.AppResponseError.NotFound) {
394+
log.warn(`${funcName} PairingData no longer valid for ${steamId}.`, logParam);
395+
pairingData.valid = false;
396+
}
397+
}
398+
else {
399+
log.error(`${funcName} We got completely wrong response: ${JSON.stringify(rpInfo)}`, logParam);
400+
}
401+
}
402+
else {
403+
pairingData.valid = true;
404+
}
405+
}
406+
else {
407+
/* Error or rp.ConsumeTokensError */
408+
if (rpInfo instanceof Error) {
409+
log.error(`${funcName} Error: ${rpInfo.message}`, logParam);
410+
}
411+
else {
412+
log.error(`${funcName} ConsumeTokensError: ${rpInfo}`, logParam);
413+
}
414+
}
415+
}
416+
gim.updateGuildInstance(this.guildId);
417+
}
418+
378419
public async setupSmartDevices() {
379420

380421
// TODO! Go through all smart devices to get the status of them

src/rustPlusEvents/connected.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,11 @@ export async function execute(rpInstance: RustPlusInstance) {
3636

3737
rpInstance.stopReconnectionTimer();
3838

39+
await rpInstance.validatePairingData();
40+
3941
// TODO! Retrieve map to see if map wipe
4042

41-
rpInstance.setupSmartDevices();
43+
await rpInstance.setupSmartDevices();
4244

4345
rpInstance.startServerPollingHandler();
4446

0 commit comments

Comments
 (0)