moons-ta-client 1.1.1 → 1.1.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/constants.d.ts +2 -2
- package/dist/constants.js +2 -2
- package/dist/index.d.ts +9 -4
- package/dist/index.esm.js +55 -19
- package/dist/models/requests.d.ts +4 -0
- package/dist/models/requests.js +9 -2
- package/dist/tournament-assistant-client.d.ts +3 -2
- package/dist/tournament-assistant-client.js +41 -18
- package/package.json +1 -1
package/dist/constants.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export declare const masterAddress = "server.tournamentassistant.net";
|
|
2
2
|
export declare const masterPort = "8676";
|
|
3
|
-
export declare const version = "1.1.
|
|
4
|
-
export declare const versionCode =
|
|
3
|
+
export declare const version = "1.1.3";
|
|
4
|
+
export declare const versionCode = 113;
|
package/dist/constants.js
CHANGED
package/dist/index.d.ts
CHANGED
|
@@ -3875,6 +3875,10 @@ interface Request_Connect {
|
|
|
3875
3875
|
* @generated from protobuf field: int32 client_version = 1;
|
|
3876
3876
|
*/
|
|
3877
3877
|
clientVersion: number;
|
|
3878
|
+
/**
|
|
3879
|
+
* @generated from protobuf field: int32 ui_version = 2;
|
|
3880
|
+
*/
|
|
3881
|
+
uiVersion: number;
|
|
3878
3882
|
}
|
|
3879
3883
|
/**
|
|
3880
3884
|
* @generated MessageType for protobuf message proto.packets.Request.Connect
|
|
@@ -4509,11 +4513,12 @@ type TAClientEvents = {
|
|
|
4509
4513
|
};
|
|
4510
4514
|
declare class TAClient extends CustomEventEmitter<TAClientEvents> {
|
|
4511
4515
|
stateManager: StateManager;
|
|
4516
|
+
private uiVersion;
|
|
4512
4517
|
private client?;
|
|
4513
4518
|
private token;
|
|
4514
4519
|
private shouldHeartbeat;
|
|
4515
4520
|
private heartbeatInterval;
|
|
4516
|
-
constructor();
|
|
4521
|
+
constructor(uiVersion?: number | undefined);
|
|
4517
4522
|
get isConnected(): boolean;
|
|
4518
4523
|
get isConnecting(): boolean;
|
|
4519
4524
|
connect(serverAddress: string, port: string): Promise<Response>;
|
|
@@ -4529,7 +4534,7 @@ declare class TAClient extends CustomEventEmitter<TAClientEvents> {
|
|
|
4529
4534
|
delayTestFinished: (userIds: string[]) => void;
|
|
4530
4535
|
joinTournament: (tournamentId: string) => Promise<Response>;
|
|
4531
4536
|
getLeaderboard: (tournamentId: string, qualifierId: string, mapId: string) => Promise<Response>;
|
|
4532
|
-
loadSong: (levelId: string, userIds: string[]) => Promise<ResponseFromUser[]>;
|
|
4537
|
+
loadSong: (levelId: string, userIds: string[], timeout?: number) => Promise<ResponseFromUser[]>;
|
|
4533
4538
|
loadImage: (bitmap: Uint8Array, userIds: string[]) => Promise<ResponseFromUser[]>;
|
|
4534
4539
|
private handlePacket;
|
|
4535
4540
|
updateUser: (tournamentId: string, user: User) => Promise<Response>;
|
|
@@ -4579,7 +4584,7 @@ declare class TAClient extends CustomEventEmitter<TAClientEvents> {
|
|
|
4579
4584
|
|
|
4580
4585
|
declare const masterAddress = "server.tournamentassistant.net";
|
|
4581
4586
|
declare const masterPort = "8676";
|
|
4582
|
-
declare const version = "1.1.
|
|
4583
|
-
declare const versionCode =
|
|
4587
|
+
declare const version = "1.1.3";
|
|
4588
|
+
declare const versionCode = 113;
|
|
4584
4589
|
|
|
4585
4590
|
export { Acknowledgement, Acknowledgement_AcknowledgementType, Beatmap, Channel, Characteristic, Command, Command_PlaySong, Command_SendBotMessage, CoreServer, CustomEventEmitter, DiscordUser, Event, Event_MatchCreated, Event_MatchDeleted, Event_MatchUpdated, Event_QualifierCreated, Event_QualifierDeleted, Event_QualifierUpdated, Event_ServerAdded, Event_ServerDeleted, Event_TournamentCreated, Event_TournamentDeleted, Event_TournamentUpdated, Event_UserAdded, Event_UserLeft, Event_UserUpdated, ForwardingPacket, GameplayModifiers, GameplayModifiers_GameOptions, GameplayParameters, Guild, LeaderboardEntry, Map, Match, ModalOption, Packet, Permissions, PlayerSpecificSettings, PlayerSpecificSettings_ArcVisibilityType, PlayerSpecificSettings_NoteJumpDurationTypeSettings, PlayerSpecificSettings_PlayerOptions, Push, Push_SongFinished, Push_SongFinished_CompletionType, QualifierEvent, QualifierEvent_EventSettings, QualifierEvent_LeaderboardSort, RealtimeScore, Request, Request_AddAuthorizedUser, Request_AddAuthorizedUserPermission, Request_AddQualifierMaps, Request_AddServer, Request_AddTournamentPool, Request_AddTournamentPoolMaps, Request_AddTournamentTeam, Request_AddUserToMatch, Request_Connect, Request_CreateMatch, Request_CreateQualifierEvent, Request_CreateTournament, Request_DeleteMatch, Request_DeleteQualifierEvent, Request_DeleteTournament, Request_GetAuthorizedUsers, Request_GetDiscordInfo, Request_Join, Request_LoadSong, Request_PreloadImageForStreamSync, Request_QualifierScores, Request_RemainingAttempts, Request_RemoveAuthorizedUser, Request_RemoveAuthorizedUserPermission, Request_RemoveQualifierMap, Request_RemoveTournamentPool, Request_RemoveTournamentPoolMap, Request_RemoveTournamentTeam, Request_RemoveUserFromMatch, Request_SetMatchLeader, Request_SetMatchMap, Request_SetQualifierFlags, Request_SetQualifierImage, Request_SetQualifierInfoChannel, Request_SetQualifierLeaderboardSort, Request_SetQualifierName, Request_SetTournamentAllowUnauthorizedView, Request_SetTournamentBannedMods, Request_SetTournamentEnablePools, Request_SetTournamentEnableTeams, Request_SetTournamentImage, Request_SetTournamentName, Request_SetTournamentPoolName, Request_SetTournamentScoreUpdateFrequency, Request_SetTournamentShowQualifierButton, Request_SetTournamentShowTournamentButton, Request_SetTournamentTeamImage, Request_SetTournamentTeamName, Request_ShowModal, Request_SubmitQualifierScore, Request_UpdateQualifierMap, Request_UpdateTournamentPoolMap, Request_UpdateUser, Response, type ResponseFromUser, Response_AddAuthorizedUser, Response_AddServer, Response_Connect, Response_Connect_ConnectFailReason, Response_CreateMatch, Response_CreateQualifierEvent, Response_CreateTournament, Response_DeleteMatch, Response_DeleteQualifierEvent, Response_DeleteTournament, Response_GetAuthorizedUsers, Response_GetAuthorizedUsers_AuthroizedUser, Response_GetDiscordInfo, Response_Join, Response_Join_JoinFailReason, Response_LeaderboardEntries, Response_LoadSong, Response_PreloadImageForStreamSync, Response_RemainingAttempts, Response_RemoveAuthorizedUser, Response_ResponseType, Response_ShowModal, Response_UpdateAuthorizedUser, Response_UpdateMatch, Response_UpdateQualifierEvent, Response_UpdateTournament, Response_UpdateUser, ScoreTrackerHand, State, TAClient, Tournament, Tournament_TournamentSettings, Tournament_TournamentSettings_Pool, Tournament_TournamentSettings_Team, User, User_ClientTypes, User_DiscordInfo, User_DownloadStates, User_PlayStates, User_Point, getTournaments, masterAddress, masterPort, version, versionCode };
|
package/dist/index.esm.js
CHANGED
|
@@ -13433,11 +13433,18 @@ var Request_Connect$Type = class extends MessageType {
|
|
|
13433
13433
|
kind: "scalar",
|
|
13434
13434
|
T: 5
|
|
13435
13435
|
/*ScalarType.INT32*/
|
|
13436
|
+
},
|
|
13437
|
+
{
|
|
13438
|
+
no: 2,
|
|
13439
|
+
name: "ui_version",
|
|
13440
|
+
kind: "scalar",
|
|
13441
|
+
T: 5
|
|
13442
|
+
/*ScalarType.INT32*/
|
|
13436
13443
|
}
|
|
13437
13444
|
]);
|
|
13438
13445
|
}
|
|
13439
13446
|
create(value) {
|
|
13440
|
-
const message = { clientVersion: 0 };
|
|
13447
|
+
const message = { clientVersion: 0, uiVersion: 0 };
|
|
13441
13448
|
globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
|
|
13442
13449
|
if (value !== void 0)
|
|
13443
13450
|
reflectionMergePartial(this, message, value);
|
|
@@ -13452,6 +13459,10 @@ var Request_Connect$Type = class extends MessageType {
|
|
|
13452
13459
|
1:
|
|
13453
13460
|
message.clientVersion = reader.int32();
|
|
13454
13461
|
break;
|
|
13462
|
+
case /* int32 ui_version */
|
|
13463
|
+
2:
|
|
13464
|
+
message.uiVersion = reader.int32();
|
|
13465
|
+
break;
|
|
13455
13466
|
default:
|
|
13456
13467
|
let u2 = options.readUnknownField;
|
|
13457
13468
|
if (u2 === "throw")
|
|
@@ -13466,6 +13477,8 @@ var Request_Connect$Type = class extends MessageType {
|
|
|
13466
13477
|
internalBinaryWrite(message, writer, options) {
|
|
13467
13478
|
if (message.clientVersion !== 0)
|
|
13468
13479
|
writer.tag(1, WireType.Varint).int32(message.clientVersion);
|
|
13480
|
+
if (message.uiVersion !== 0)
|
|
13481
|
+
writer.tag(2, WireType.Varint).int32(message.uiVersion);
|
|
13469
13482
|
let u2 = options.writeUnknownFields;
|
|
13470
13483
|
if (u2 !== false)
|
|
13471
13484
|
(u2 == true ? UnknownFieldHandler.onWrite : u2)(this.typeName, message, writer);
|
|
@@ -15112,8 +15125,8 @@ init_buffer2();
|
|
|
15112
15125
|
init_process2();
|
|
15113
15126
|
var masterAddress = "server.tournamentassistant.net";
|
|
15114
15127
|
var masterPort = "8676";
|
|
15115
|
-
var version = "1.1.
|
|
15116
|
-
var versionCode =
|
|
15128
|
+
var version = "1.1.3";
|
|
15129
|
+
var versionCode = 113;
|
|
15117
15130
|
|
|
15118
15131
|
// src/tournament-assistant-client.ts
|
|
15119
15132
|
var import_ws2 = __toESM(require_ws(), 1);
|
|
@@ -15209,13 +15222,15 @@ var Scraper = class extends CustomEventEmitter {
|
|
|
15209
15222
|
// src/tournament-assistant-client.ts
|
|
15210
15223
|
var TAClient = class extends CustomEventEmitter {
|
|
15211
15224
|
stateManager;
|
|
15225
|
+
uiVersion;
|
|
15212
15226
|
client;
|
|
15213
15227
|
token = "";
|
|
15214
15228
|
shouldHeartbeat = false;
|
|
15215
15229
|
heartbeatInterval;
|
|
15216
|
-
constructor() {
|
|
15230
|
+
constructor(uiVersion = void 0) {
|
|
15217
15231
|
super();
|
|
15218
15232
|
this.stateManager = new StateManager();
|
|
15233
|
+
this.uiVersion = uiVersion;
|
|
15219
15234
|
}
|
|
15220
15235
|
// --- State helpers --- //
|
|
15221
15236
|
get isConnected() {
|
|
@@ -15249,7 +15264,8 @@ var TAClient = class extends CustomEventEmitter {
|
|
|
15249
15264
|
type: {
|
|
15250
15265
|
oneofKind: "connect",
|
|
15251
15266
|
connect: {
|
|
15252
|
-
clientVersion: versionCode
|
|
15267
|
+
clientVersion: versionCode,
|
|
15268
|
+
uiVersion: this.uiVersion ?? 0
|
|
15253
15269
|
}
|
|
15254
15270
|
}
|
|
15255
15271
|
});
|
|
@@ -15332,7 +15348,7 @@ var TAClient = class extends CustomEventEmitter {
|
|
|
15332
15348
|
};
|
|
15333
15349
|
this.forwardToUsers(packet, to);
|
|
15334
15350
|
}
|
|
15335
|
-
async sendRequest(request, to) {
|
|
15351
|
+
async sendRequest(request, to, timeout = 3e4) {
|
|
15336
15352
|
const packet = {
|
|
15337
15353
|
token: "",
|
|
15338
15354
|
// Overridden in this.send()
|
|
@@ -15356,22 +15372,29 @@ var TAClient = class extends CustomEventEmitter {
|
|
|
15356
15372
|
onAuthorizationRequested
|
|
15357
15373
|
);
|
|
15358
15374
|
};
|
|
15359
|
-
const
|
|
15375
|
+
const getUnrespondedUsers = () => {
|
|
15360
15376
|
const responseUsers = responseDictionary.map((x) => x.userId);
|
|
15361
15377
|
const expectedUsers = to ?? ["00000000-0000-0000-0000-000000000000"];
|
|
15362
|
-
if (responseUsers.length
|
|
15363
|
-
return;
|
|
15378
|
+
if (responseUsers.length === expectedUsers.length) {
|
|
15379
|
+
return [];
|
|
15364
15380
|
}
|
|
15365
15381
|
const sortedArr1 = responseUsers.slice().sort();
|
|
15366
15382
|
const sortedArr2 = expectedUsers.slice().sort();
|
|
15367
|
-
|
|
15368
|
-
|
|
15369
|
-
|
|
15383
|
+
let waitingForUsers = [];
|
|
15384
|
+
for (let i2 = 0; i2 < sortedArr2.length; i2++) {
|
|
15385
|
+
if (i2 > sortedArr1.length || sortedArr2[i2] !== sortedArr1[i2]) {
|
|
15386
|
+
waitingForUsers.push(sortedArr2[i2]);
|
|
15370
15387
|
}
|
|
15371
15388
|
}
|
|
15372
|
-
|
|
15373
|
-
|
|
15374
|
-
|
|
15389
|
+
return waitingForUsers;
|
|
15390
|
+
};
|
|
15391
|
+
const checkResponses = () => {
|
|
15392
|
+
const waitingForUsers = getUnrespondedUsers();
|
|
15393
|
+
if (waitingForUsers.length === 0) {
|
|
15394
|
+
removeListeners();
|
|
15395
|
+
clearTimeout(timeoutTimer);
|
|
15396
|
+
resolve(responseDictionary);
|
|
15397
|
+
}
|
|
15375
15398
|
};
|
|
15376
15399
|
const onResponseReceived = (response) => {
|
|
15377
15400
|
const expectedUsers = to ?? ["00000000-0000-0000-0000-000000000000"];
|
|
@@ -15385,13 +15408,26 @@ var TAClient = class extends CustomEventEmitter {
|
|
|
15385
15408
|
};
|
|
15386
15409
|
const createTimeout = (time) => {
|
|
15387
15410
|
return setTimeout(() => {
|
|
15411
|
+
const unrespondedUsers = getUnrespondedUsers();
|
|
15412
|
+
for (let user of unrespondedUsers) {
|
|
15413
|
+
responseDictionary.push({
|
|
15414
|
+
userId: user,
|
|
15415
|
+
response: {
|
|
15416
|
+
type: 0 /* Fail */,
|
|
15417
|
+
respondingToPacketId: packet.id,
|
|
15418
|
+
details: {
|
|
15419
|
+
oneofKind: void 0
|
|
15420
|
+
}
|
|
15421
|
+
}
|
|
15422
|
+
});
|
|
15423
|
+
}
|
|
15388
15424
|
removeListeners();
|
|
15389
15425
|
resolve(responseDictionary);
|
|
15390
15426
|
}, time);
|
|
15391
15427
|
};
|
|
15392
|
-
const
|
|
15428
|
+
const timeoutTimer = createTimeout(timeout);
|
|
15393
15429
|
const onAuthorizationRequested = () => {
|
|
15394
|
-
clearTimeout(
|
|
15430
|
+
clearTimeout(timeoutTimer);
|
|
15395
15431
|
throw "Authorization token invalid or not provided";
|
|
15396
15432
|
};
|
|
15397
15433
|
addListeners();
|
|
@@ -15491,7 +15527,7 @@ var TAClient = class extends CustomEventEmitter {
|
|
|
15491
15527
|
}
|
|
15492
15528
|
return response[0].response;
|
|
15493
15529
|
};
|
|
15494
|
-
loadSong = async (levelId, userIds) => {
|
|
15530
|
+
loadSong = async (levelId, userIds, timeout) => {
|
|
15495
15531
|
const response = await this.sendRequest({
|
|
15496
15532
|
type: {
|
|
15497
15533
|
oneofKind: "loadSong",
|
|
@@ -15500,7 +15536,7 @@ var TAClient = class extends CustomEventEmitter {
|
|
|
15500
15536
|
customHostUrl: ""
|
|
15501
15537
|
}
|
|
15502
15538
|
}
|
|
15503
|
-
}, userIds);
|
|
15539
|
+
}, userIds, timeout);
|
|
15504
15540
|
if (response.length <= 0) {
|
|
15505
15541
|
throw new Error("Server timed out, or no users responded");
|
|
15506
15542
|
}
|
|
@@ -1027,6 +1027,10 @@ export interface Request_Connect {
|
|
|
1027
1027
|
* @generated from protobuf field: int32 client_version = 1;
|
|
1028
1028
|
*/
|
|
1029
1029
|
clientVersion: number;
|
|
1030
|
+
/**
|
|
1031
|
+
* @generated from protobuf field: int32 ui_version = 2;
|
|
1032
|
+
*/
|
|
1033
|
+
uiVersion: number;
|
|
1030
1034
|
}
|
|
1031
1035
|
/**
|
|
1032
1036
|
* @generated from protobuf message proto.packets.Request.Join
|
package/dist/models/requests.js
CHANGED
|
@@ -3148,11 +3148,12 @@ export const Request_AddServer = new Request_AddServer$Type();
|
|
|
3148
3148
|
class Request_Connect$Type extends MessageType {
|
|
3149
3149
|
constructor() {
|
|
3150
3150
|
super("proto.packets.Request.Connect", [
|
|
3151
|
-
{ no: 1, name: "client_version", kind: "scalar", T: 5 /*ScalarType.INT32*/ }
|
|
3151
|
+
{ no: 1, name: "client_version", kind: "scalar", T: 5 /*ScalarType.INT32*/ },
|
|
3152
|
+
{ no: 2, name: "ui_version", kind: "scalar", T: 5 /*ScalarType.INT32*/ }
|
|
3152
3153
|
]);
|
|
3153
3154
|
}
|
|
3154
3155
|
create(value) {
|
|
3155
|
-
const message = { clientVersion: 0 };
|
|
3156
|
+
const message = { clientVersion: 0, uiVersion: 0 };
|
|
3156
3157
|
globalThis.Object.defineProperty(message, MESSAGE_TYPE, { enumerable: false, value: this });
|
|
3157
3158
|
if (value !== undefined)
|
|
3158
3159
|
reflectionMergePartial(this, message, value);
|
|
@@ -3166,6 +3167,9 @@ class Request_Connect$Type extends MessageType {
|
|
|
3166
3167
|
case /* int32 client_version */ 1:
|
|
3167
3168
|
message.clientVersion = reader.int32();
|
|
3168
3169
|
break;
|
|
3170
|
+
case /* int32 ui_version */ 2:
|
|
3171
|
+
message.uiVersion = reader.int32();
|
|
3172
|
+
break;
|
|
3169
3173
|
default:
|
|
3170
3174
|
let u = options.readUnknownField;
|
|
3171
3175
|
if (u === "throw")
|
|
@@ -3181,6 +3185,9 @@ class Request_Connect$Type extends MessageType {
|
|
|
3181
3185
|
/* int32 client_version = 1; */
|
|
3182
3186
|
if (message.clientVersion !== 0)
|
|
3183
3187
|
writer.tag(1, WireType.Varint).int32(message.clientVersion);
|
|
3188
|
+
/* int32 ui_version = 2; */
|
|
3189
|
+
if (message.uiVersion !== 0)
|
|
3190
|
+
writer.tag(2, WireType.Varint).int32(message.uiVersion);
|
|
3184
3191
|
let u = options.writeUnknownFields;
|
|
3185
3192
|
if (u !== false)
|
|
3186
3193
|
(u == true ? UnknownFieldHandler.onWrite : u)(this.typeName, message, writer);
|
|
@@ -43,11 +43,12 @@ type TAClientEvents = {
|
|
|
43
43
|
};
|
|
44
44
|
export declare class TAClient extends CustomEventEmitter<TAClientEvents> {
|
|
45
45
|
stateManager: StateManager;
|
|
46
|
+
private uiVersion;
|
|
46
47
|
private client?;
|
|
47
48
|
private token;
|
|
48
49
|
private shouldHeartbeat;
|
|
49
50
|
private heartbeatInterval;
|
|
50
|
-
constructor();
|
|
51
|
+
constructor(uiVersion?: number | undefined);
|
|
51
52
|
get isConnected(): boolean;
|
|
52
53
|
get isConnecting(): boolean;
|
|
53
54
|
connect(serverAddress: string, port: string): Promise<Response>;
|
|
@@ -63,7 +64,7 @@ export declare class TAClient extends CustomEventEmitter<TAClientEvents> {
|
|
|
63
64
|
delayTestFinished: (userIds: string[]) => void;
|
|
64
65
|
joinTournament: (tournamentId: string) => Promise<Response>;
|
|
65
66
|
getLeaderboard: (tournamentId: string, qualifierId: string, mapId: string) => Promise<Response>;
|
|
66
|
-
loadSong: (levelId: string, userIds: string[]) => Promise<ResponseFromUser[]>;
|
|
67
|
+
loadSong: (levelId: string, userIds: string[], timeout?: number) => Promise<ResponseFromUser[]>;
|
|
67
68
|
loadImage: (bitmap: Uint8Array, userIds: string[]) => Promise<ResponseFromUser[]>;
|
|
68
69
|
private handlePacket;
|
|
69
70
|
updateUser: (tournamentId: string, user: User) => Promise<Response>;
|
|
@@ -10,13 +10,15 @@ export * from "./scraper.js";
|
|
|
10
10
|
export * from "./models/models.js";
|
|
11
11
|
export class TAClient extends CustomEventEmitter {
|
|
12
12
|
stateManager;
|
|
13
|
+
uiVersion;
|
|
13
14
|
client;
|
|
14
15
|
token = "";
|
|
15
16
|
shouldHeartbeat = false;
|
|
16
17
|
heartbeatInterval;
|
|
17
|
-
constructor() {
|
|
18
|
+
constructor(uiVersion = undefined) {
|
|
18
19
|
super();
|
|
19
20
|
this.stateManager = new StateManager();
|
|
21
|
+
this.uiVersion = uiVersion;
|
|
20
22
|
}
|
|
21
23
|
// --- State helpers --- //
|
|
22
24
|
get isConnected() {
|
|
@@ -48,6 +50,7 @@ export class TAClient extends CustomEventEmitter {
|
|
|
48
50
|
oneofKind: "connect",
|
|
49
51
|
connect: {
|
|
50
52
|
clientVersion: versionCode,
|
|
53
|
+
uiVersion: this.uiVersion ?? 0
|
|
51
54
|
},
|
|
52
55
|
},
|
|
53
56
|
});
|
|
@@ -126,7 +129,7 @@ export class TAClient extends CustomEventEmitter {
|
|
|
126
129
|
};
|
|
127
130
|
this.forwardToUsers(packet, to);
|
|
128
131
|
}
|
|
129
|
-
async sendRequest(request, to) {
|
|
132
|
+
async sendRequest(request, to, timeout = 30000) {
|
|
130
133
|
const packet = {
|
|
131
134
|
token: "",
|
|
132
135
|
from: this.stateManager.getSelfGuid(),
|
|
@@ -147,24 +150,31 @@ export class TAClient extends CustomEventEmitter {
|
|
|
147
150
|
this.removeListener("responseReceived", onResponseReceived);
|
|
148
151
|
this.removeListener("authorizationRequestedFromServer", onAuthorizationRequested);
|
|
149
152
|
};
|
|
150
|
-
|
|
151
|
-
const checkResponses = () => {
|
|
153
|
+
const getUnrespondedUsers = () => {
|
|
152
154
|
const responseUsers = responseDictionary.map((x) => x.userId);
|
|
153
155
|
const expectedUsers = to ?? ["00000000-0000-0000-0000-000000000000"]; // If we didn't forward this to any users, we should expect a response from the server
|
|
154
|
-
if (responseUsers.length
|
|
155
|
-
return;
|
|
156
|
+
if (responseUsers.length === expectedUsers.length) {
|
|
157
|
+
return [];
|
|
156
158
|
}
|
|
157
159
|
const sortedArr1 = responseUsers.slice().sort();
|
|
158
160
|
const sortedArr2 = expectedUsers.slice().sort();
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
161
|
+
let waitingForUsers = [];
|
|
162
|
+
for (let i = 0; i < sortedArr2.length; i++) {
|
|
163
|
+
if (i > sortedArr1.length || sortedArr2[i] !== sortedArr1[i]) {
|
|
164
|
+
waitingForUsers.push(sortedArr2[i]);
|
|
162
165
|
}
|
|
163
166
|
}
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
167
|
+
return waitingForUsers;
|
|
168
|
+
};
|
|
169
|
+
// Check that we got responses from all expected users
|
|
170
|
+
const checkResponses = () => {
|
|
171
|
+
const waitingForUsers = getUnrespondedUsers();
|
|
172
|
+
if (waitingForUsers.length === 0) {
|
|
173
|
+
// All responses are received, clean up and resolve
|
|
174
|
+
removeListeners();
|
|
175
|
+
clearTimeout(timeoutTimer);
|
|
176
|
+
resolve(responseDictionary);
|
|
177
|
+
}
|
|
168
178
|
};
|
|
169
179
|
// Add to the dictionary when the response is to this packet, and from an expected user
|
|
170
180
|
const onResponseReceived = (response) => {
|
|
@@ -178,18 +188,31 @@ export class TAClient extends CustomEventEmitter {
|
|
|
178
188
|
checkResponses();
|
|
179
189
|
}
|
|
180
190
|
};
|
|
181
|
-
// Return what we have after
|
|
191
|
+
// Return what we have after 30 seconds, inject errors for users that haven't responded yet
|
|
182
192
|
const createTimeout = (time) => {
|
|
183
193
|
return setTimeout(() => {
|
|
194
|
+
const unrespondedUsers = getUnrespondedUsers();
|
|
195
|
+
for (let user of unrespondedUsers) {
|
|
196
|
+
responseDictionary.push({
|
|
197
|
+
userId: user,
|
|
198
|
+
response: {
|
|
199
|
+
type: Response_ResponseType.Fail,
|
|
200
|
+
respondingToPacketId: packet.id,
|
|
201
|
+
details: {
|
|
202
|
+
oneofKind: undefined
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
});
|
|
206
|
+
}
|
|
184
207
|
removeListeners();
|
|
185
208
|
resolve(responseDictionary);
|
|
186
209
|
}, time);
|
|
187
210
|
};
|
|
188
|
-
const
|
|
211
|
+
const timeoutTimer = createTimeout(timeout);
|
|
189
212
|
// If authorization is requested, we're assuming an external application failed
|
|
190
213
|
// to provide a valid token, so we will combust
|
|
191
214
|
const onAuthorizationRequested = () => {
|
|
192
|
-
clearTimeout(
|
|
215
|
+
clearTimeout(timeoutTimer);
|
|
193
216
|
throw "Authorization token invalid or not provided";
|
|
194
217
|
};
|
|
195
218
|
addListeners();
|
|
@@ -290,7 +313,7 @@ export class TAClient extends CustomEventEmitter {
|
|
|
290
313
|
}
|
|
291
314
|
return response[0].response;
|
|
292
315
|
};
|
|
293
|
-
loadSong = async (levelId, userIds) => {
|
|
316
|
+
loadSong = async (levelId, userIds, timeout) => {
|
|
294
317
|
const response = await this.sendRequest({
|
|
295
318
|
type: {
|
|
296
319
|
oneofKind: "loadSong",
|
|
@@ -299,7 +322,7 @@ export class TAClient extends CustomEventEmitter {
|
|
|
299
322
|
customHostUrl: ""
|
|
300
323
|
},
|
|
301
324
|
},
|
|
302
|
-
}, userIds);
|
|
325
|
+
}, userIds, timeout);
|
|
303
326
|
if (response.length <= 0) {
|
|
304
327
|
throw new Error("Server timed out, or no users responded");
|
|
305
328
|
}
|