Refactor connection handling and improve reconnection logic in LagoonAddons
This commit is contained in:
@@ -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,23 +48,20 @@ class LagoonAddons {
|
|||||||
console.log('Lagoon loaded !');
|
console.log('Lagoon loaded !');
|
||||||
}
|
}
|
||||||
async clock() {
|
async clock() {
|
||||||
this.timer++;
|
this.timer += 20;
|
||||||
// 1 seconde
|
if (this.ws.isOpen) {
|
||||||
if (this.timer % interval === 0) {
|
const players = world.getAllPlayers().filter((p) => p.initialized).map((p) => {
|
||||||
if (this.ws.isOpen) {
|
return {
|
||||||
const players = world.getAllPlayers().filter((p) => p.initialized).map((p) => {
|
...p.location,
|
||||||
return {
|
code: p.lagoonCode,
|
||||||
...p.location,
|
muted: p.hasTag('muted')
|
||||||
code: p.lagoonCode,
|
};
|
||||||
muted: p.hasTag('muted')
|
});
|
||||||
};
|
this.ws.send(JSON.stringify({
|
||||||
});
|
type: 'positions',
|
||||||
this.ws.send(JSON.stringify({
|
uuid: utils.makeid(100),
|
||||||
type: 'positions',
|
data: players
|
||||||
uuid: utils.makeid(100),
|
}));
|
||||||
data: players
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
60
src/main.ts
60
src/main.ts
@@ -9,31 +9,42 @@ class LagoonAddons {
|
|||||||
private ws!: WebSocketClient;
|
private ws!: WebSocketClient;
|
||||||
public timer: number = 0;
|
public timer: number = 0;
|
||||||
|
|
||||||
constructor () {
|
constructor() {
|
||||||
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);
|
||||||
|
|
||||||
const type = payload.type;
|
const type = payload.type;
|
||||||
const data = payload.data;
|
const data = payload.data;
|
||||||
if(type == 'status' && data == 'connected !') {
|
if (type == 'status' && data == 'connected !') {
|
||||||
utils.logStaff('§aLagoon connected !');
|
utils.logStaff('§aLagoon connected !');
|
||||||
console.log('Lagoon connected !')
|
console.log('Lagoon connected !')
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
utils.logStaff('ERROR With Payload : '+event.message);
|
utils.logStaff('ERROR With Payload : ' + event.message);
|
||||||
console.log('ERROR With Payload : '+event.message)
|
console.log('ERROR With Payload : ' + event.message)
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
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,27 +61,24 @@ class LagoonAddons {
|
|||||||
|
|
||||||
|
|
||||||
async clock() {
|
async clock() {
|
||||||
this.timer++;
|
this.timer += 20;
|
||||||
|
|
||||||
// 1 seconde
|
if (this.ws.isOpen) {
|
||||||
if (this.timer % interval === 0) {
|
const players: { x: number, y: number, z: number, code: string, muted: boolean }[] = world.getAllPlayers().filter((p) => p.initialized).map((p) => {
|
||||||
|
return {
|
||||||
|
...p.location,
|
||||||
|
code: p.lagoonCode,
|
||||||
|
muted: p.hasTag('muted')
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
if (this.ws.isOpen) {
|
this.ws.send(JSON.stringify({
|
||||||
const players: {x: number, y: number, z: number, code: string, muted: boolean}[] = world.getAllPlayers().filter((p) => p.initialized).map((p) => {
|
type: 'positions',
|
||||||
return {
|
uuid: utils.makeid(100),
|
||||||
...p.location,
|
data: players
|
||||||
code: p.lagoonCode,
|
}));
|
||||||
muted: p.hasTag('muted')
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
this.ws.send(JSON.stringify({
|
|
||||||
type: 'positions',
|
|
||||||
uuid: utils.makeid(100),
|
|
||||||
data: players
|
|
||||||
}));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user