Refactor connection handling and improve reconnection logic in LagoonAddons

This commit is contained in:
2026-05-27 11:17:42 +02:00
parent 7ba6587f02
commit 9fb87dd3e0
2 changed files with 60 additions and 47 deletions

View File

@@ -2,13 +2,13 @@ import { system, world } from "@minecraft/server";
import utils from "utils"; import utils from "utils";
import { websocket } from "@minecraft/server-net"; import { websocket } from "@minecraft/server-net";
import { InitPlayer } from "entities/player"; import { InitPlayer } from "entities/player";
import { interval, roomCode } from "properties"; import { roomCode } from "properties";
class LagoonAddons { class LagoonAddons {
constructor() { constructor() {
this.timer = 0; this.timer = 0;
world.afterEvents.worldLoad.subscribe(() => system.run(() => this.initEarlyExecution())); world.afterEvents.worldLoad.subscribe(() => system.run(() => this.initEarlyExecution()));
} }
async initEarlyExecution() { async connect() {
this.ws = await websocket.connect('wss://lagoon.under-scape.com/ws/rooms/' + roomCode + '/plugins/proximity'); this.ws = await websocket.connect('wss://lagoon.under-scape.com/ws/rooms/' + roomCode + '/plugins/proximity');
this.ws.afterEvents.message.subscribe((event) => { this.ws.afterEvents.message.subscribe((event) => {
try { try {
@@ -26,9 +26,17 @@ class LagoonAddons {
} }
}); });
this.ws.afterEvents.close.subscribe((event) => { this.ws.afterEvents.close.subscribe((event) => {
utils.logStaff(`§cConnexion à lagoon fermé ! (${event})`); utils.logStaff(`§cConnection to Lagoon closed. (${event})`);
console.log(`Connexion à lagoon fermé ! (${event})`); console.log(`Connection to Lagoon closed. (${event})`);
utils.logStaff(`§eReconnecting in 5 seconds.`);
console.log(`Reconnecting in 5 seconds.`);
system.runTimeout(() => {
this.connect();
}, 20 * 5);
}); });
}
async initEarlyExecution() {
await this.connect();
world.getAllPlayers().forEach((p) => InitPlayer(p)); world.getAllPlayers().forEach((p) => InitPlayer(p));
world.afterEvents.playerSpawn.subscribe((e) => { world.afterEvents.playerSpawn.subscribe((e) => {
system.runTimeout(() => { system.runTimeout(() => {
@@ -40,9 +48,7 @@ class LagoonAddons {
console.log('Lagoon loaded !'); console.log('Lagoon loaded !');
} }
async clock() { async clock() {
this.timer++; this.timer += 20;
// 1 seconde
if (this.timer % interval === 0) {
if (this.ws.isOpen) { if (this.ws.isOpen) {
const players = world.getAllPlayers().filter((p) => p.initialized).map((p) => { const players = world.getAllPlayers().filter((p) => p.initialized).map((p) => {
return { return {
@@ -59,5 +65,4 @@ class LagoonAddons {
} }
} }
} }
}
new LagoonAddons(); new LagoonAddons();

View File

@@ -13,8 +13,9 @@ class LagoonAddons {
world.afterEvents.worldLoad.subscribe(() => system.run(() => this.initEarlyExecution())); world.afterEvents.worldLoad.subscribe(() => system.run(() => this.initEarlyExecution()));
} }
async initEarlyExecution() { async connect() {
this.ws = await websocket.connect('wss://lagoon.under-scape.com/ws/rooms/' + roomCode + '/plugins/proximity'); this.ws = await websocket.connect('wss://lagoon.under-scape.com/ws/rooms/' + roomCode + '/plugins/proximity');
this.ws.afterEvents.message.subscribe((event) => { this.ws.afterEvents.message.subscribe((event) => {
try { try {
const payload = JSON.parse(event.message); const payload = JSON.parse(event.message);
@@ -31,9 +32,19 @@ class LagoonAddons {
} }
}); });
this.ws.afterEvents.close.subscribe((event) => { this.ws.afterEvents.close.subscribe((event) => {
utils.logStaff(`§cConnexion à lagoon fermé ! (${event})`); utils.logStaff(`§cConnection to Lagoon closed. (${event})`);
console.log(`Connexion à lagoon fermé ! (${event})`) console.log(`Connection to Lagoon closed. (${event})`);
utils.logStaff(`§eReconnecting in 5 seconds.`);
console.log(`Reconnecting in 5 seconds.`);
system.runTimeout(() => {
this.connect();
}, 20 * 5);
}); });
}
async initEarlyExecution() {
await this.connect();
world.getAllPlayers().forEach((p) => InitPlayer(p)); world.getAllPlayers().forEach((p) => InitPlayer(p));
world.afterEvents.playerSpawn.subscribe((e) => { world.afterEvents.playerSpawn.subscribe((e) => {
@@ -50,10 +61,7 @@ class LagoonAddons {
async clock() { async clock() {
this.timer++; this.timer += 20;
// 1 seconde
if (this.timer % interval === 0) {
if (this.ws.isOpen) { if (this.ws.isOpen) {
const players: { x: number, y: number, z: number, code: string, muted: boolean }[] = world.getAllPlayers().filter((p) => p.initialized).map((p) => { const players: { x: number, y: number, z: number, code: string, muted: boolean }[] = world.getAllPlayers().filter((p) => p.initialized).map((p) => {
@@ -70,7 +78,7 @@ class LagoonAddons {
data: players data: players
})); }));
} }
}
} }
} }