moons-ta-client 1.0.1 → 1.0.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.
Files changed (43) hide show
  1. package/dist/client.d.ts +22 -0
  2. package/dist/client.js +77 -0
  3. package/dist/constants.d.ts +4 -0
  4. package/{src/constants.ts → dist/constants.js} +1 -1
  5. package/dist/custom-event-emitter.d.ts +7 -0
  6. package/dist/custom-event-emitter.js +16 -0
  7. package/dist/index.d.ts +4591 -0
  8. package/dist/index.esm.js +16500 -0
  9. package/{src/index.ts → dist/index.js} +1 -1
  10. package/dist/models/commands.d.ts +116 -0
  11. package/{src/models/commands.ts → dist/models/commands.js} +17 -102
  12. package/dist/models/discord.d.ts +76 -0
  13. package/{src/models/discord.ts → dist/models/discord.js} +15 -62
  14. package/dist/models/events.d.ts +419 -0
  15. package/{src/models/events.ts → dist/models/events.js} +89 -354
  16. package/dist/models/index.js +8 -0
  17. package/dist/models/models.d.ts +1137 -0
  18. package/{src/models/models.ts → dist/models/models.js} +200 -799
  19. package/dist/models/packets.d.ts +144 -0
  20. package/{src/models/packets.ts → dist/models/packets.js} +26 -126
  21. package/dist/models/pushes.d.ts +122 -0
  22. package/{src/models/pushes.ts → dist/models/pushes.js} +24 -96
  23. package/dist/models/requests.d.ts +1694 -0
  24. package/{src/models/requests.ts → dist/models/requests.js} +323 -1469
  25. package/dist/models/responses.d.ts +799 -0
  26. package/{src/models/responses.ts → dist/models/responses.js} +161 -669
  27. package/dist/scraper.d.ts +2 -0
  28. package/dist/scraper.js +87 -0
  29. package/dist/state-manager.d.ts +50 -0
  30. package/dist/state-manager.js +196 -0
  31. package/dist/tournament-assistant-client.d.ts +113 -0
  32. package/dist/tournament-assistant-client.js +1167 -0
  33. package/package.json +8 -2
  34. package/rollup.config.mjs +0 -16
  35. package/scripts/esbuild.mjs +0 -24
  36. package/scripts/fixImports.mjs +0 -44
  37. package/src/client.ts +0 -101
  38. package/src/custom-event-emitter.ts +0 -21
  39. package/src/scraper.ts +0 -137
  40. package/src/state-manager.ts +0 -308
  41. package/src/tournament-assistant-client.ts +0 -1553
  42. package/tsconfig.json +0 -27
  43. /package/{src/models/index.ts → dist/models/index.d.ts} +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "moons-ta-client",
3
- "version": "1.0.1",
3
+ "version": "1.0.3",
4
4
  "type": "module",
5
5
  "main": "./dist/index.esm.js",
6
6
  "types": "./dist/index.d.ts",
@@ -36,5 +36,11 @@
36
36
  "npm": "^10.8.0",
37
37
  "uuid": "^9.0.0",
38
38
  "ws": "^8.17.0"
39
- }
39
+ },
40
+ "files": [
41
+ "LICENSE",
42
+ "README.md",
43
+ "dist",
44
+ "package.json"
45
+ ]
40
46
  }
package/rollup.config.mjs DELETED
@@ -1,16 +0,0 @@
1
- import dts from 'rollup-plugin-dts';
2
- import path from 'path';
3
- import { join } from 'path';
4
- import { fileURLToPath } from 'url';
5
-
6
- const __filename = fileURLToPath(import.meta.url); // get the resolved path to the file
7
- const __dirname = path.dirname(__filename); // get the name of the directory
8
-
9
- export default {
10
- input: join(__dirname, './dist/index.d.ts'), // Entry point of your type definitions
11
- output: {
12
- file: join(__dirname, './dist/index.d.ts'), // Output file
13
- format: 'es'
14
- },
15
- plugins: [dts()]
16
- };
@@ -1,24 +0,0 @@
1
- /* eslint-disable @typescript-eslint/no-var-requires */
2
- import pkg from '../package.json' assert { type: 'json' };
3
- import esbuild from 'esbuild';
4
- import GlobalsPlugin from 'esbuild-plugin-globals';
5
- import { polyfillNode } from "esbuild-plugin-polyfill-node";
6
-
7
- esbuild.build({
8
- entryPoints: ['src/index.ts'],
9
- bundle: true,
10
- outfile: pkg.exports['.'].default,
11
- globalName: 'TournamentAssistantClient',
12
- platform: 'browser',
13
- define: {
14
- global: 'window',
15
- },
16
- target: ['chrome80'],
17
- format: 'esm',
18
- plugins: [
19
- GlobalsPlugin({
20
- ws: 'WebSocket',
21
- }),
22
- polyfillNode(),
23
- ],
24
- });
@@ -1,44 +0,0 @@
1
- import fs from 'fs';
2
- import path from 'path'
3
- import { fileURLToPath } from 'url';
4
-
5
- const __filename = fileURLToPath(import.meta.url); // get the resolved path to the file
6
- const __dirname = path.dirname(__filename); // get the name of the directory
7
- const directoryPath = path.join(__dirname, '../src/models');
8
-
9
- fs.readdir(directoryPath, (err, files) => {
10
- if (err) {
11
- return console.error('Unable to scan directory: ' + err);
12
- }
13
-
14
- files.forEach((file) => {
15
- const filePath = path.join(directoryPath, file);
16
-
17
- fs.readFile(filePath, 'utf8', (err, data) => {
18
- if (err) {
19
- return console.error('Unable to read file: ' + err);
20
- }
21
-
22
- const updatedData = data
23
- .replace(/import\s+(.*?)\s+from\s+['"](\.\/.+?)['"]/g, (match, p1, p2) => {
24
- if (!p2.endsWith('.js')) {
25
- return `import ${p1} from '${p2}.js'`;
26
- }
27
- return match;
28
- })
29
- .replace(/export\s+.*?from\s+['"](\.\/.+?)['"]/g, (match, p1) => {
30
- if (!p1.endsWith('.js')) {
31
- return match.replace(p1, `${p1}.js`);
32
- }
33
- return match;
34
- });
35
-
36
- fs.writeFile(filePath, updatedData, 'utf8', (err) => {
37
- if (err) {
38
- return console.error('Unable to write file: ' + err);
39
- }
40
- console.log(`Updated file: ${filePath}`);
41
- });
42
- });
43
- });
44
- });
package/src/client.ts DELETED
@@ -1,101 +0,0 @@
1
- import { CustomEventEmitter } from "./custom-event-emitter.js";
2
- import { Packet, ForwardingPacket } from "./models/packets.js";
3
- import WebSocket from "ws";
4
-
5
- // Created by Moon on 6/11/2022
6
-
7
- export type ClientEvents = {
8
- packetReceived: Packet;
9
- connectedToServer: {};
10
- failedToConnectToServer: {};
11
- disconnectedFromServer: {};
12
- };
13
-
14
- export class Client extends CustomEventEmitter<ClientEvents> {
15
- private address: string;
16
- private port: string;
17
- private token: string;
18
- private websocket: WebSocket | undefined;
19
- private websocketWasConnected = false;
20
-
21
- constructor(address: string, port: string, token?: string) {
22
- super();
23
- this.address = address;
24
- this.port = port;
25
- this.token = token ?? "";
26
- }
27
-
28
- public get isConnected() {
29
- return this.websocket?.readyState === WebSocket.OPEN;
30
- }
31
-
32
- public get readyState() {
33
- return this.websocket?.readyState;
34
- }
35
-
36
- public connect() {
37
- this.websocket = new WebSocket(`wss://${this.address}:${this.port}`);
38
- this.websocket.binaryType = "arraybuffer";
39
-
40
- if (!this.websocket) {
41
- this.emit("failedToConnectToServer", {});
42
- return;
43
- }
44
-
45
- this.websocket.onopen = () => {
46
- this.websocketWasConnected = true;
47
- this.emit("connectedToServer", {});
48
- };
49
-
50
- this.websocket.onmessage = (event) => {
51
- if (event.data instanceof ArrayBuffer) {
52
- const packet = Packet.fromBinary(new Uint8Array(event.data));
53
- this.emit("packetReceived", packet);
54
- }
55
- };
56
-
57
- this.websocket.onclose = () => {
58
- if (this.websocketWasConnected) {
59
- this.emit("disconnectedFromServer", {});
60
- } else {
61
- this.emit("failedToConnectToServer", {});
62
- }
63
- };
64
-
65
- this.websocket.onerror = (error) => {
66
- console.error(error);
67
- };
68
- }
69
-
70
- public disconnect() {
71
- this.websocket?.close();
72
- }
73
-
74
- public setToken(token: string) {
75
- this.token = token;
76
- }
77
-
78
- public send(packet: Packet, ids?: string[]): void {
79
- let toSend = packet;
80
- toSend.token = this.token;
81
-
82
- if (ids) {
83
- const toForward: ForwardingPacket = {
84
- packet,
85
- forwardTo: ids,
86
- };
87
-
88
- toSend = {
89
- token: this.token,
90
- from: packet.from,
91
- id: packet.id,
92
- packet: {
93
- oneofKind: "forwardingPacket",
94
- forwardingPacket: toForward,
95
- },
96
- };
97
- }
98
-
99
- this.websocket?.send(Packet.toBinary(toSend));
100
- }
101
- }
@@ -1,21 +0,0 @@
1
- import { EventEmitter } from 'events';
2
-
3
- export class CustomEventEmitter<T extends Record<string, any>> {
4
- private emitter = new EventEmitter();
5
-
6
- public get on(): <K extends Extract<keyof T, string | symbol>>(eventName: K, fn: (params: T[K]) => void) => void {
7
- return this.emitter.on.bind(this.emitter);
8
- }
9
-
10
- public get once(): <K extends Extract<keyof T, string | symbol>>(eventName: K, fn: (params: T[K]) => void) => void {
11
- return this.emitter.once.bind(this.emitter);
12
- }
13
-
14
- public get emit(): <K extends Extract<keyof T, string | symbol>>(eventName: K, params: T[K]) => void {
15
- return this.emitter.emit.bind(this.emitter);
16
- }
17
-
18
- public get removeListener(): <K extends Extract<keyof T, string | symbol>>(eventName: K, fn: (params: T[K]) => void) => void {
19
- return this.emitter.removeListener.bind(this.emitter);
20
- }
21
- }
package/src/scraper.ts DELETED
@@ -1,137 +0,0 @@
1
- import { CustomEventEmitter } from "./custom-event-emitter.js";
2
- import { CoreServer, Tournament } from "./models/models.js";
3
- import { TAClient } from "./tournament-assistant-client.js";
4
-
5
- const MASTER_ADDRESS = "server.tournamentassistant.net";
6
- const MASTER_PORT = "8676";
7
-
8
- type OnProgress = {
9
- totalServers: number;
10
- succeededServers: number;
11
- failedServers: number;
12
- tournaments: Tournament[];
13
- };
14
-
15
- type ScraperEvents = {
16
- onProgress: OnProgress;
17
- };
18
-
19
- export function getTournaments(
20
- token: string,
21
- onProgress: (
22
- totalServers: number,
23
- succeededServers: number,
24
- failedServers: number
25
- ) => void,
26
- onComplete: (tournaments: Tournament[]) => void
27
- ) {
28
- const scraper = new Scraper(token);
29
- scraper.on("onProgress", (progress) => {
30
- onProgress(
31
- progress.totalServers,
32
- progress.succeededServers,
33
- progress.failedServers
34
- );
35
-
36
- if (
37
- progress.failedServers + progress.succeededServers ===
38
- progress.totalServers
39
- ) {
40
- onComplete(progress.tournaments);
41
- }
42
- });
43
- scraper.getTournaments();
44
- }
45
-
46
- class Scraper extends CustomEventEmitter<ScraperEvents> {
47
- private servers: CoreServer[] = [];
48
- private tournaments: Tournament[] = [];
49
- private token: string;
50
-
51
- private succeededServers = 0;
52
- private failedServers = 0;
53
-
54
- constructor(token: string) {
55
- super();
56
- this.token = token;
57
- }
58
-
59
- public getTournaments() {
60
- const masterClient = new TAClient();
61
- masterClient.setAuthToken(this.token);
62
-
63
- masterClient.on("connectedToServer", async (response) => {
64
- this.servers = response.state!.knownServers;
65
- this.tournaments = response.state!.tournaments;
66
-
67
- masterClient.disconnect();
68
-
69
- //We successfully got tournaments from the master server
70
- this.succeededServers++;
71
- this.emit("onProgress", {
72
- totalServers: this.servers.length,
73
- succeededServers: this.succeededServers,
74
- failedServers: this.failedServers,
75
- tournaments: this.tournaments,
76
- });
77
-
78
- //Just running this map kicks off all the Promises, so no need to await them.
79
- //This is probably a sin. If anyone knows the proper way to do this, hit me up on discord
80
- this.servers
81
- .filter(
82
- (x) =>
83
- `${x.address}:${x.websocketPort}` !==
84
- `${MASTER_ADDRESS}:${MASTER_PORT}`
85
- )
86
- .map((x) =>
87
- this.getTournamentsFromServer(x.address, `${x.websocketPort}`)
88
- );
89
- });
90
-
91
- masterClient.on("failedToConnectToServer", () => {
92
- //We failed to get tournaments from the master server
93
- this.failedServers++;
94
- this.emit("onProgress", {
95
- totalServers: this.servers.length,
96
- succeededServers: this.succeededServers,
97
- failedServers: this.failedServers,
98
- tournaments: this.tournaments,
99
- });
100
- });
101
-
102
- masterClient.connect(MASTER_ADDRESS, MASTER_PORT);
103
- }
104
-
105
- private async getTournamentsFromServer(address: string, port: string) {
106
- const client = new TAClient();
107
- client.setAuthToken(this.token);
108
-
109
- client.on("connectedToServer", (response) => {
110
- this.tournaments = [...this.tournaments, ...response.state!.tournaments];
111
-
112
- client.disconnect();
113
-
114
- //We successfully got tournaments from the server
115
- this.succeededServers++;
116
- this.emit("onProgress", {
117
- totalServers: this.servers.length,
118
- succeededServers: this.succeededServers,
119
- failedServers: this.failedServers,
120
- tournaments: this.tournaments,
121
- });
122
- });
123
-
124
- client.on("failedToConnectToServer", () => {
125
- //We failed to get tournaments from the server
126
- this.failedServers++;
127
- this.emit("onProgress", {
128
- totalServers: this.servers.length,
129
- succeededServers: this.succeededServers,
130
- failedServers: this.failedServers,
131
- tournaments: this.tournaments,
132
- });
133
- });
134
-
135
- client.connect(address, port);
136
- }
137
- }
@@ -1,308 +0,0 @@
1
- import { CustomEventEmitter } from "./custom-event-emitter.js";
2
- import {
3
- User,
4
- Tournament,
5
- Match,
6
- QualifierEvent,
7
- CoreServer,
8
- State,
9
- } from "./models/models.js";
10
- import { Packet } from "./models/packets.js";
11
- import { v4 as uuidv4 } from "uuid";
12
- import { Response_ResponseType } from "./models/responses.js";
13
-
14
- type StateManagerEvents = {
15
- userConnected: [User, Tournament];
16
- userUpdated: [User, Tournament];
17
- userDisconnected: [User, Tournament];
18
-
19
- matchCreated: [Match, Tournament];
20
- matchUpdated: [Match, Tournament];
21
- matchDeleted: [Match, Tournament];
22
-
23
- qualifierCreated: [QualifierEvent, Tournament];
24
- qualifierUpdated: [QualifierEvent, Tournament];
25
- qualifierDeleted: [QualifierEvent, Tournament];
26
-
27
- tournamentCreated: Tournament;
28
- tournamentUpdated: Tournament;
29
- tournamentDeleted: Tournament;
30
-
31
- serverAdded: CoreServer;
32
- serverDeleted: CoreServer;
33
- };
34
-
35
- export class StateManager extends CustomEventEmitter<StateManagerEvents> {
36
- private state: State;
37
- private self: string;
38
-
39
- constructor() {
40
- super();
41
- this.self = uuidv4();
42
- this.state = {
43
- tournaments: [],
44
- knownServers: [],
45
- };
46
- }
47
-
48
- // --- Packet handler --- //
49
- public handlePacket(packet: Packet) {
50
- if (packet.packet.oneofKind === "event") {
51
- const event = packet.packet.event;
52
- switch (event.changedObject.oneofKind) {
53
- case "userAdded": {
54
- this.userConnected(
55
- event.changedObject.userAdded.tournamentId,
56
- event.changedObject.userAdded.user!
57
- );
58
- break;
59
- }
60
- case "userUpdated": {
61
- this.userUpdated(
62
- event.changedObject.userUpdated.tournamentId,
63
- event.changedObject.userUpdated.user!
64
- );
65
- break;
66
- }
67
- case "userLeft": {
68
- this.userDisconnected(
69
- event.changedObject.userLeft.tournamentId,
70
- event.changedObject.userLeft.user!
71
- );
72
- break;
73
- }
74
- case "matchCreated": {
75
- this.matchCreated(
76
- event.changedObject.matchCreated.tournamentId,
77
- event.changedObject.matchCreated.match!
78
- );
79
- break;
80
- }
81
- case "matchUpdated": {
82
- this.matchUpdated(
83
- event.changedObject.matchUpdated.tournamentId,
84
- event.changedObject.matchUpdated.match!
85
- );
86
- break;
87
- }
88
- case "matchDeleted": {
89
- this.matchDeleted(
90
- event.changedObject.matchDeleted.tournamentId,
91
- event.changedObject.matchDeleted.match!
92
- );
93
- break;
94
- }
95
- case "qualifierCreated": {
96
- this.qualifierEventCreated(
97
- event.changedObject.qualifierCreated.tournamentId,
98
- event.changedObject.qualifierCreated.event!
99
- );
100
- break;
101
- }
102
- case "qualifierUpdated": {
103
- this.qualifierEventUpdated(
104
- event.changedObject.qualifierUpdated.tournamentId,
105
- event.changedObject.qualifierUpdated.event!
106
- );
107
- break;
108
- }
109
- case "qualifierDeleted": {
110
- this.qualifierEventDeleted(
111
- event.changedObject.qualifierDeleted.tournamentId,
112
- event.changedObject.qualifierDeleted.event!
113
- );
114
- break;
115
- }
116
- case "tournamentCreated": {
117
- this.tournamentCreated(
118
- event.changedObject.tournamentCreated.tournament!
119
- );
120
- break;
121
- }
122
- case "tournamentUpdated": {
123
- this.tournamentUpdated(
124
- event.changedObject.tournamentUpdated.tournament!
125
- );
126
- break;
127
- }
128
- case "tournamentDeleted": {
129
- this.tournamentDeleted(
130
- event.changedObject.tournamentDeleted.tournament!
131
- );
132
- break;
133
- }
134
- case "serverAdded": {
135
- this.serverAdded(event.changedObject.serverAdded.server!);
136
- break;
137
- }
138
- case "serverDeleted": {
139
- this.serverDeleted(event.changedObject.serverDeleted.server!);
140
- break;
141
- }
142
- }
143
- } else if (packet.packet.oneofKind === "response") {
144
- const response = packet.packet.response;
145
-
146
- if (response.details.oneofKind === "connect") {
147
- const connect = response.details.connect;
148
-
149
- if (response.type === Response_ResponseType.Success) {
150
- this.state = connect.state!;
151
- }
152
- } else if (response.details.oneofKind === "join") {
153
- const join = response.details.join;
154
-
155
- if (response.type === Response_ResponseType.Success) {
156
- this.state = join.state!;
157
- this.self = join.selfGuid;
158
- }
159
- }
160
- }
161
- }
162
-
163
- // --- Helpers --- //
164
- public getSelfGuid() {
165
- return this.self;
166
- }
167
-
168
- public getTournaments() {
169
- return this.state.tournaments;
170
- }
171
-
172
- public getTournament(id: string) {
173
- return this.state.tournaments.find((x) => x.guid === id);
174
- }
175
-
176
- public getUsers(tournamentId: string) {
177
- return this.getTournament(tournamentId)?.users;
178
- }
179
-
180
- public getUser(tournamentId: string, userId: string) {
181
- return this.getUsers(tournamentId)?.find((x) => x.guid === userId);
182
- }
183
-
184
- public getMatches(tournamentId: string) {
185
- return this.getTournament(tournamentId)?.matches;
186
- }
187
-
188
- public getMatch(tournamentId: string, matchId: string) {
189
- return this.getMatches(tournamentId)?.find((x) => x.guid === matchId);
190
- }
191
-
192
- public getQualifiers(tournamentId: string) {
193
- return this.getTournament(tournamentId)?.qualifiers;
194
- }
195
-
196
- public getQualifier(tournamentId: string, qualifierId: string) {
197
- return this.getQualifiers(tournamentId)?.find((x) => x.guid === qualifierId);
198
- }
199
-
200
- public getKnownServers() {
201
- return this.state.knownServers;
202
- }
203
-
204
- // --- Event handlers --- //
205
- private userConnected = (tournamentId: string, user: User) => {
206
- const tournament = this.getTournament(tournamentId);
207
- tournament!.users = [...tournament!.users, user];
208
- this.emit("userConnected", [user, tournament!]);
209
- };
210
-
211
- private userUpdated = (tournamentId: string, user: User) => {
212
- const tournament = this.getTournament(tournamentId);
213
- const index = tournament!.users.findIndex((x) => x.guid === user.guid);
214
- tournament!.users[index] = user;
215
- this.emit("userUpdated", [user, tournament!]);
216
- };
217
-
218
- private userDisconnected = (tournamentId: string, user: User) => {
219
- const tournament = this.getTournament(tournamentId);
220
- tournament!.users = tournament!.users.filter((x) => x.guid !== user.guid);
221
- this.emit("userDisconnected", [user, tournament!]);
222
- };
223
-
224
- private matchCreated = (tournamentId: string, match: Match) => {
225
- const tournament = this.getTournament(tournamentId);
226
- tournament!.matches = [...tournament!.matches, match];
227
- this.emit("matchCreated", [match, tournament!]);
228
- };
229
-
230
- private matchUpdated = (tournamentId: string, match: Match) => {
231
- const tournament = this.getTournament(tournamentId);
232
- const index = tournament!.matches.findIndex((x) => x.guid === match.guid);
233
- tournament!.matches[index] = match;
234
- this.emit("matchUpdated", [match, tournament!]);
235
- };
236
-
237
- private matchDeleted = (tournamentId: string, match: Match) => {
238
- const tournament = this.getTournament(tournamentId);
239
- tournament!.matches = tournament!.matches.filter(
240
- (x) => x.guid !== match.guid
241
- );
242
- this.emit("matchDeleted", [match, tournament!]);
243
- };
244
-
245
- private qualifierEventCreated = (
246
- tournamentId: string,
247
- event: QualifierEvent
248
- ) => {
249
- const tournament = this.getTournament(tournamentId);
250
- tournament!.qualifiers = [...tournament!.qualifiers, event];
251
- this.emit("qualifierCreated", [event, tournament!]);
252
- };
253
-
254
- private qualifierEventUpdated = (
255
- tournamentId: string,
256
- event: QualifierEvent
257
- ) => {
258
- const tournament = this.getTournament(tournamentId);
259
- const index = tournament!.qualifiers.findIndex(
260
- (x) => x.guid === event.guid
261
- );
262
- tournament!.qualifiers[index] = event;
263
- this.emit("qualifierUpdated", [event, tournament!]);
264
- };
265
-
266
- private qualifierEventDeleted = (
267
- tournamentId: string,
268
- event: QualifierEvent
269
- ) => {
270
- const tournament = this.getTournament(tournamentId);
271
- tournament!.qualifiers = tournament!.qualifiers.filter(
272
- (x) => x.guid !== event.guid
273
- );
274
- this.emit("qualifierDeleted", [event, tournament!]);
275
- };
276
-
277
- private tournamentCreated = (tournament: Tournament) => {
278
- this.state.tournaments = [...this.state.tournaments, tournament];
279
- this.emit("tournamentCreated", tournament);
280
- };
281
-
282
- private tournamentUpdated = (tournament: Tournament) => {
283
- const index = this.state.tournaments.findIndex(
284
- (x) => x.guid === tournament.guid
285
- );
286
- this.state.tournaments[index] = tournament;
287
- this.emit("tournamentUpdated", tournament);
288
- };
289
-
290
- private tournamentDeleted = (tournament: Tournament) => {
291
- this.state.tournaments = this.state.tournaments.filter(
292
- (x) => x.guid !== tournament.guid
293
- );
294
- this.emit("tournamentDeleted", tournament);
295
- };
296
-
297
- private serverAdded = (server: CoreServer) => {
298
- this.state.knownServers = [...this.state.knownServers, server];
299
- this.emit("serverAdded", server);
300
- };
301
-
302
- private serverDeleted = (server: CoreServer) => {
303
- this.state.knownServers = this.state.knownServers.filter(
304
- (x) => `${server.address}:${server.port}` !== `${x.address}:${x.port}`
305
- );
306
- this.emit("serverDeleted", server);
307
- };
308
- }