Applying Prettier on pusher and back
This commit is contained in:
parent
06b7f5ba2f
commit
10c3d6dee2
71 changed files with 1848 additions and 1652 deletions
|
@ -1,5 +1,5 @@
|
|||
import {PusherRoom} from "../Model/PusherRoom";
|
||||
import {CharacterLayer, ExSocketInterface} from "../Model/Websocket/ExSocketInterface";
|
||||
import { PusherRoom } from "../Model/PusherRoom";
|
||||
import { CharacterLayer, ExSocketInterface } from "../Model/Websocket/ExSocketInterface";
|
||||
import {
|
||||
GroupDeleteMessage,
|
||||
ItemEventMessage,
|
||||
|
@ -31,21 +31,21 @@ import {
|
|||
RefreshRoomMessage,
|
||||
EmotePromptMessage,
|
||||
} from "../Messages/generated/messages_pb";
|
||||
import {ProtobufUtils} from "../Model/Websocket/ProtobufUtils";
|
||||
import {JITSI_ISS, SECRET_JITSI_KEY} from "../Enum/EnvironmentVariable";
|
||||
import {adminApi, CharacterTexture} from "./AdminApi";
|
||||
import {emitInBatch} from "./IoSocketHelpers";
|
||||
import { ProtobufUtils } from "../Model/Websocket/ProtobufUtils";
|
||||
import { JITSI_ISS, SECRET_JITSI_KEY } from "../Enum/EnvironmentVariable";
|
||||
import { adminApi, CharacterTexture } from "./AdminApi";
|
||||
import { emitInBatch } from "./IoSocketHelpers";
|
||||
import Jwt from "jsonwebtoken";
|
||||
import {JITSI_URL} from "../Enum/EnvironmentVariable";
|
||||
import {clientEventsEmitter} from "./ClientEventsEmitter";
|
||||
import {gaugeManager} from "./GaugeManager";
|
||||
import {apiClientRepository} from "./ApiClientRepository";
|
||||
import {GroupDescriptor, UserDescriptor, ZoneEventListener} from "_Model/Zone";
|
||||
import { JITSI_URL } from "../Enum/EnvironmentVariable";
|
||||
import { clientEventsEmitter } from "./ClientEventsEmitter";
|
||||
import { gaugeManager } from "./GaugeManager";
|
||||
import { apiClientRepository } from "./ApiClientRepository";
|
||||
import { GroupDescriptor, UserDescriptor, ZoneEventListener } from "_Model/Zone";
|
||||
import Debug from "debug";
|
||||
import {ExAdminSocketInterface} from "_Model/Websocket/ExAdminSocketInterface";
|
||||
import {WebSocket} from "uWebSockets.js";
|
||||
import { ExAdminSocketInterface } from "_Model/Websocket/ExAdminSocketInterface";
|
||||
import { WebSocket } from "uWebSockets.js";
|
||||
|
||||
const debug = Debug('socket');
|
||||
const debug = Debug("socket");
|
||||
|
||||
interface AdminSocketRoomsList {
|
||||
[index: string]: number;
|
||||
|
@ -55,12 +55,11 @@ interface AdminSocketUsersList {
|
|||
}
|
||||
|
||||
export interface AdminSocketData {
|
||||
rooms: AdminSocketRoomsList,
|
||||
users: AdminSocketUsersList,
|
||||
rooms: AdminSocketRoomsList;
|
||||
users: AdminSocketUsersList;
|
||||
}
|
||||
|
||||
export class SocketManager implements ZoneEventListener {
|
||||
|
||||
private rooms: Map<string, PusherRoom> = new Map<string, PusherRoom>();
|
||||
private sockets: Map<number, ExSocketInterface> = new Map<number, ExSocketInterface>();
|
||||
|
||||
|
@ -78,47 +77,53 @@ export class SocketManager implements ZoneEventListener {
|
|||
const adminRoomStream = apiClient.adminRoom();
|
||||
client.adminConnection = adminRoomStream;
|
||||
|
||||
adminRoomStream.on('data', (message: ServerToAdminClientMessage) => {
|
||||
|
||||
if (message.hasUserjoinedroom()) {
|
||||
const userJoinedRoomMessage = message.getUserjoinedroom() as UserJoinedRoomMessage;
|
||||
if (!client.disconnecting) {
|
||||
client.send(JSON.stringify({
|
||||
type: 'MemberJoin',
|
||||
data: {
|
||||
uuid: userJoinedRoomMessage.getUuid(),
|
||||
name: userJoinedRoomMessage.getName(),
|
||||
ipAddress: userJoinedRoomMessage.getIpaddress(),
|
||||
roomId: roomId,
|
||||
}
|
||||
}));
|
||||
adminRoomStream
|
||||
.on("data", (message: ServerToAdminClientMessage) => {
|
||||
if (message.hasUserjoinedroom()) {
|
||||
const userJoinedRoomMessage = message.getUserjoinedroom() as UserJoinedRoomMessage;
|
||||
if (!client.disconnecting) {
|
||||
client.send(
|
||||
JSON.stringify({
|
||||
type: "MemberJoin",
|
||||
data: {
|
||||
uuid: userJoinedRoomMessage.getUuid(),
|
||||
name: userJoinedRoomMessage.getName(),
|
||||
ipAddress: userJoinedRoomMessage.getIpaddress(),
|
||||
roomId: roomId,
|
||||
},
|
||||
})
|
||||
);
|
||||
}
|
||||
} else if (message.hasUserleftroom()) {
|
||||
const userLeftRoomMessage = message.getUserleftroom() as UserLeftRoomMessage;
|
||||
if (!client.disconnecting) {
|
||||
client.send(
|
||||
JSON.stringify({
|
||||
type: "MemberLeave",
|
||||
data: {
|
||||
uuid: userLeftRoomMessage.getUuid(),
|
||||
},
|
||||
})
|
||||
);
|
||||
}
|
||||
} else {
|
||||
throw new Error("Unexpected admin message");
|
||||
}
|
||||
} else if (message.hasUserleftroom()) {
|
||||
const userLeftRoomMessage = message.getUserleftroom() as UserLeftRoomMessage;
|
||||
})
|
||||
.on("end", () => {
|
||||
console.warn("Admin connection lost to back server");
|
||||
// Let's close the front connection if the back connection is closed. This way, we can retry connecting from the start.
|
||||
if (!client.disconnecting) {
|
||||
client.send(JSON.stringify({
|
||||
type: 'MemberLeave',
|
||||
data: {
|
||||
uuid: userLeftRoomMessage.getUuid()
|
||||
}
|
||||
}));
|
||||
this.closeWebsocketConnection(client, 1011, "Connection lost to back server");
|
||||
}
|
||||
} else {
|
||||
throw new Error('Unexpected admin message');
|
||||
}
|
||||
}).on('end', () => {
|
||||
console.warn('Admin connection lost to back server');
|
||||
// Let's close the front connection if the back connection is closed. This way, we can retry connecting from the start.
|
||||
if (!client.disconnecting) {
|
||||
this.closeWebsocketConnection(client, 1011, 'Connection lost to back server');
|
||||
}
|
||||
console.log('A user left');
|
||||
}).on('error', (err: Error) => {
|
||||
console.error('Error in connection to back server:', err);
|
||||
if (!client.disconnecting) {
|
||||
this.closeWebsocketConnection(client, 1011, 'Error while connecting to back server');
|
||||
}
|
||||
});
|
||||
console.log("A user left");
|
||||
})
|
||||
.on("error", (err: Error) => {
|
||||
console.error("Error in connection to back server:", err);
|
||||
if (!client.disconnecting) {
|
||||
this.closeWebsocketConnection(client, 1011, "Error while connecting to back server");
|
||||
}
|
||||
});
|
||||
|
||||
const message = new AdminPusherToBackMessage();
|
||||
message.setSubscribetoroom(roomId);
|
||||
|
@ -126,14 +131,14 @@ export class SocketManager implements ZoneEventListener {
|
|||
adminRoomStream.write(message);
|
||||
}
|
||||
|
||||
leaveAdminRoom(socket : ExAdminSocketInterface) {
|
||||
leaveAdminRoom(socket: ExAdminSocketInterface) {
|
||||
if (socket.adminConnection) {
|
||||
socket.adminConnection.end();
|
||||
}
|
||||
}
|
||||
|
||||
getAdminSocketDataFor(roomId:string): AdminSocketData {
|
||||
throw new Error('Not reimplemented yet');
|
||||
getAdminSocketDataFor(roomId: string): AdminSocketData {
|
||||
throw new Error("Not reimplemented yet");
|
||||
/*const data:AdminSocketData = {
|
||||
rooms: {},
|
||||
users: {},
|
||||
|
@ -153,7 +158,6 @@ export class SocketManager implements ZoneEventListener {
|
|||
async handleJoinRoom(client: ExSocketInterface): Promise<void> {
|
||||
const viewport = client.viewport;
|
||||
try {
|
||||
|
||||
const joinRoomMessage = new JoinRoomMessage();
|
||||
joinRoomMessage.setUseruuid(client.userUuid);
|
||||
joinRoomMessage.setIpaddress(client.IPAddress);
|
||||
|
@ -176,46 +180,49 @@ export class SocketManager implements ZoneEventListener {
|
|||
joinRoomMessage.addCharacterlayer(characterLayerMessage);
|
||||
}
|
||||
|
||||
|
||||
console.log('Calling joinRoom')
|
||||
console.log("Calling joinRoom");
|
||||
const apiClient = await apiClientRepository.getClient(client.roomId);
|
||||
const streamToPusher = apiClient.joinRoom();
|
||||
clientEventsEmitter.emitClientJoin(client.userUuid, client.roomId);
|
||||
|
||||
client.backConnection = streamToPusher;
|
||||
|
||||
streamToPusher.on('data', (message: ServerToClientMessage) => {
|
||||
if (message.hasRoomjoinedmessage()) {
|
||||
client.userId = (message.getRoomjoinedmessage() as RoomJoinedMessage).getCurrentuserid();
|
||||
// TODO: do we need this.sockets anymore?
|
||||
this.sockets.set(client.userId, client);
|
||||
streamToPusher
|
||||
.on("data", (message: ServerToClientMessage) => {
|
||||
if (message.hasRoomjoinedmessage()) {
|
||||
client.userId = (message.getRoomjoinedmessage() as RoomJoinedMessage).getCurrentuserid();
|
||||
// TODO: do we need this.sockets anymore?
|
||||
this.sockets.set(client.userId, client);
|
||||
|
||||
// If this is the first message sent, send back the viewport.
|
||||
this.handleViewport(client, viewport);
|
||||
}
|
||||
|
||||
if (message.hasRefreshroommessage()) {
|
||||
const refreshMessage:RefreshRoomMessage = message.getRefreshroommessage() as unknown as RefreshRoomMessage;
|
||||
this.refreshRoomData(refreshMessage.getRoomid(), refreshMessage.getVersionnumber())
|
||||
}
|
||||
// If this is the first message sent, send back the viewport.
|
||||
this.handleViewport(client, viewport);
|
||||
}
|
||||
|
||||
// Let's pass data over from the back to the client.
|
||||
if (!client.disconnecting) {
|
||||
client.send(message.serializeBinary().buffer, true);
|
||||
}
|
||||
}).on('end', () => {
|
||||
console.warn('Connection lost to back server');
|
||||
// Let's close the front connection if the back connection is closed. This way, we can retry connecting from the start.
|
||||
if (!client.disconnecting) {
|
||||
this.closeWebsocketConnection(client, 1011, 'Connection lost to back server');
|
||||
}
|
||||
console.log('A user left');
|
||||
}).on('error', (err: Error) => {
|
||||
console.error('Error in connection to back server:', err);
|
||||
if (!client.disconnecting) {
|
||||
this.closeWebsocketConnection(client, 1011, 'Error while connecting to back server');
|
||||
}
|
||||
});
|
||||
if (message.hasRefreshroommessage()) {
|
||||
const refreshMessage: RefreshRoomMessage =
|
||||
message.getRefreshroommessage() as unknown as RefreshRoomMessage;
|
||||
this.refreshRoomData(refreshMessage.getRoomid(), refreshMessage.getVersionnumber());
|
||||
}
|
||||
|
||||
// Let's pass data over from the back to the client.
|
||||
if (!client.disconnecting) {
|
||||
client.send(message.serializeBinary().buffer, true);
|
||||
}
|
||||
})
|
||||
.on("end", () => {
|
||||
console.warn("Connection lost to back server");
|
||||
// Let's close the front connection if the back connection is closed. This way, we can retry connecting from the start.
|
||||
if (!client.disconnecting) {
|
||||
this.closeWebsocketConnection(client, 1011, "Connection lost to back server");
|
||||
}
|
||||
console.log("A user left");
|
||||
})
|
||||
.on("error", (err: Error) => {
|
||||
console.error("Error in connection to back server:", err);
|
||||
if (!client.disconnecting) {
|
||||
this.closeWebsocketConnection(client, 1011, "Error while connecting to back server");
|
||||
}
|
||||
});
|
||||
|
||||
const pusherToBackMessage = new PusherToBackMessage();
|
||||
pusherToBackMessage.setJoinroommessage(joinRoomMessage);
|
||||
|
@ -226,7 +233,7 @@ export class SocketManager implements ZoneEventListener {
|
|||
}
|
||||
}
|
||||
|
||||
private closeWebsocketConnection(client: ExSocketInterface|ExAdminSocketInterface, code: number, reason: string) {
|
||||
private closeWebsocketConnection(client: ExSocketInterface | ExAdminSocketInterface, code: number, reason: string) {
|
||||
client.disconnecting = true;
|
||||
//this.leaveRoom(client);
|
||||
//client.close();
|
||||
|
@ -257,15 +264,13 @@ export class SocketManager implements ZoneEventListener {
|
|||
|
||||
const viewport = userMovesMessage.getViewport();
|
||||
if (viewport === undefined) {
|
||||
throw new Error('Missing viewport in UserMovesMessage');
|
||||
throw new Error("Missing viewport in UserMovesMessage");
|
||||
}
|
||||
|
||||
// Now, we need to listen to the correct viewport.
|
||||
this.handleViewport(client, viewport.toObject())
|
||||
this.handleViewport(client, viewport.toObject());
|
||||
}
|
||||
|
||||
|
||||
|
||||
onEmote(emoteMessage: EmoteEventMessage, listener: ExSocketInterface): void {
|
||||
const subMessage = new SubMessage();
|
||||
subMessage.setEmoteeventmessage(emoteMessage);
|
||||
|
@ -299,11 +304,16 @@ export class SocketManager implements ZoneEventListener {
|
|||
try {
|
||||
const reportedSocket = this.sockets.get(reportPlayerMessage.getReporteduserid());
|
||||
if (!reportedSocket) {
|
||||
throw 'reported socket user not found';
|
||||
throw "reported socket user not found";
|
||||
}
|
||||
//TODO report user on admin application
|
||||
//todo: move to back because this fail if the reported player is in another pusher.
|
||||
await adminApi.reportPlayer(reportedSocket.userUuid, reportPlayerMessage.getReportcomment(), client.userUuid, client.roomId.split('/')[2])
|
||||
//todo: move to back because this fail if the reported player is in another pusher.
|
||||
await adminApi.reportPlayer(
|
||||
reportedSocket.userUuid,
|
||||
reportPlayerMessage.getReportcomment(),
|
||||
client.userUuid,
|
||||
client.roomId.split("/")[2]
|
||||
);
|
||||
} catch (e) {
|
||||
console.error('An error occurred on "handleReportMessage"');
|
||||
console.error(e);
|
||||
|
@ -325,14 +335,14 @@ export class SocketManager implements ZoneEventListener {
|
|||
}
|
||||
|
||||
private searchClientByIdOrFail(userId: number): ExSocketInterface {
|
||||
const client: ExSocketInterface|undefined = this.sockets.get(userId);
|
||||
const client: ExSocketInterface | undefined = this.sockets.get(userId);
|
||||
if (client === undefined) {
|
||||
throw new Error("Could not find user with id " + userId);
|
||||
}
|
||||
return client;
|
||||
}
|
||||
|
||||
leaveRoom(socket : ExSocketInterface) {
|
||||
leaveRoom(socket: ExSocketInterface) {
|
||||
// leave previous room and world
|
||||
try {
|
||||
if (socket.roomId) {
|
||||
|
@ -340,15 +350,15 @@ export class SocketManager implements ZoneEventListener {
|
|||
//user leaves room
|
||||
const room: PusherRoom | undefined = this.rooms.get(socket.roomId);
|
||||
if (room) {
|
||||
debug('Leaving room %s.', socket.roomId);
|
||||
|
||||
debug("Leaving room %s.", socket.roomId);
|
||||
|
||||
room.leave(socket);
|
||||
if (room.isEmpty()) {
|
||||
this.rooms.delete(socket.roomId);
|
||||
debug('Room %s is empty. Deleting.', socket.roomId);
|
||||
debug("Room %s is empty. Deleting.", socket.roomId);
|
||||
}
|
||||
} else {
|
||||
console.error('Could not find the GameRoom the user is leaving!');
|
||||
console.error("Could not find the GameRoom the user is leaving!");
|
||||
}
|
||||
//user leave previous room
|
||||
//Client.leave(Client.roomId);
|
||||
|
@ -356,7 +366,7 @@ export class SocketManager implements ZoneEventListener {
|
|||
//delete Client.roomId;
|
||||
this.sockets.delete(socket.userId);
|
||||
clientEventsEmitter.emitClientLeave(socket.userUuid, socket.roomId);
|
||||
console.log('A user left (', this.sockets.size, ' connected users)');
|
||||
console.log("A user left (", this.sockets.size, " connected users)");
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
|
@ -368,27 +378,27 @@ export class SocketManager implements ZoneEventListener {
|
|||
|
||||
async getOrCreateRoom(roomId: string): Promise<PusherRoom> {
|
||||
//check and create new world for a room
|
||||
let world = this.rooms.get(roomId)
|
||||
if(world === undefined){
|
||||
let world = this.rooms.get(roomId);
|
||||
if (world === undefined) {
|
||||
world = new PusherRoom(roomId, this);
|
||||
if (!world.public) {
|
||||
await this.updateRoomWithAdminData(world);
|
||||
}
|
||||
this.rooms.set(roomId, world);
|
||||
}
|
||||
return Promise.resolve(world)
|
||||
return Promise.resolve(world);
|
||||
}
|
||||
|
||||
public async updateRoomWithAdminData(world: PusherRoom): Promise<void> {
|
||||
const data = await adminApi.fetchMapDetails(world.organizationSlug, world.worldSlug, world.roomSlug)
|
||||
const data = await adminApi.fetchMapDetails(world.organizationSlug, world.worldSlug, world.roomSlug);
|
||||
world.tags = data.tags;
|
||||
world.policyType = Number(data.policy_type);
|
||||
}
|
||||
|
||||
emitPlayGlobalMessage(client: ExSocketInterface, playglobalmessage: PlayGlobalMessage) {
|
||||
if (!client.tags.includes('admin')) {
|
||||
if (!client.tags.includes("admin")) {
|
||||
//In case of xss injection, we just kill the connection.
|
||||
throw 'Client is not an admin!';
|
||||
throw "Client is not an admin!";
|
||||
}
|
||||
const pusherToBackMessage = new PusherToBackMessage();
|
||||
pusherToBackMessage.setPlayglobalmessage(playglobalmessage);
|
||||
|
@ -399,44 +409,48 @@ export class SocketManager implements ZoneEventListener {
|
|||
public getWorlds(): Map<string, PusherRoom> {
|
||||
return this.rooms;
|
||||
}
|
||||
|
||||
|
||||
searchClientByUuid(uuid: string): ExSocketInterface | null {
|
||||
for(const socket of this.sockets.values()){
|
||||
if(socket.userUuid === uuid){
|
||||
for (const socket of this.sockets.values()) {
|
||||
if (socket.userUuid === uuid) {
|
||||
return socket;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
public handleQueryJitsiJwtMessage(client: ExSocketInterface, queryJitsiJwtMessage: QueryJitsiJwtMessage) {
|
||||
try {
|
||||
const room = queryJitsiJwtMessage.getJitsiroom();
|
||||
const tag = queryJitsiJwtMessage.getTag(); // FIXME: this is not secure. We should load the JSON for the current room and check rights associated to room instead.
|
||||
|
||||
if (SECRET_JITSI_KEY === '') {
|
||||
throw new Error('You must set the SECRET_JITSI_KEY key to the secret to generate JWT tokens for Jitsi.');
|
||||
if (SECRET_JITSI_KEY === "") {
|
||||
throw new Error(
|
||||
"You must set the SECRET_JITSI_KEY key to the secret to generate JWT tokens for Jitsi."
|
||||
);
|
||||
}
|
||||
|
||||
// Let's see if the current client has
|
||||
const isAdmin = client.tags.includes(tag);
|
||||
|
||||
const jwt = Jwt.sign({
|
||||
"aud": "jitsi",
|
||||
"iss": JITSI_ISS,
|
||||
"sub": JITSI_URL,
|
||||
"room": room,
|
||||
"moderator": isAdmin
|
||||
}, SECRET_JITSI_KEY, {
|
||||
expiresIn: '1d',
|
||||
algorithm: "HS256",
|
||||
header:
|
||||
{
|
||||
"alg": "HS256",
|
||||
"typ": "JWT"
|
||||
}
|
||||
});
|
||||
const jwt = Jwt.sign(
|
||||
{
|
||||
aud: "jitsi",
|
||||
iss: JITSI_ISS,
|
||||
sub: JITSI_URL,
|
||||
room: room,
|
||||
moderator: isAdmin,
|
||||
},
|
||||
SECRET_JITSI_KEY,
|
||||
{
|
||||
expiresIn: "1d",
|
||||
algorithm: "HS256",
|
||||
header: {
|
||||
alg: "HS256",
|
||||
typ: "JWT",
|
||||
},
|
||||
}
|
||||
);
|
||||
|
||||
const sendJitsiJwtMessage = new SendJitsiJwtMessage();
|
||||
sendJitsiJwtMessage.setJitsiroom(room);
|
||||
|
@ -447,7 +461,7 @@ export class SocketManager implements ZoneEventListener {
|
|||
|
||||
client.send(serverToClientMessage.serializeBinary().buffer, true);
|
||||
} catch (e) {
|
||||
console.error('An error occured while generating the Jitsi JWT token: ', e);
|
||||
console.error("An error occured while generating the Jitsi JWT token: ", e);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -471,7 +485,7 @@ export class SocketManager implements ZoneEventListener {
|
|||
backAdminMessage.setType(type);
|
||||
backConnection.sendAdminMessage(backAdminMessage, (error) => {
|
||||
if (error !== null) {
|
||||
console.error('Error while sending admin message', error);
|
||||
console.error("Error while sending admin message", error);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -496,7 +510,7 @@ export class SocketManager implements ZoneEventListener {
|
|||
banMessage.setType(type);
|
||||
backConnection.ban(banMessage, (error) => {
|
||||
if (error !== null) {
|
||||
console.error('Error while sending admin message', error);
|
||||
console.error("Error while sending admin message", error);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -504,25 +518,28 @@ export class SocketManager implements ZoneEventListener {
|
|||
/**
|
||||
* Merges the characterLayers received from the front (as an array of string) with the custom textures from the back.
|
||||
*/
|
||||
static mergeCharacterLayersAndCustomTextures(characterLayers: string[], memberTextures: CharacterTexture[]): CharacterLayer[] {
|
||||
static mergeCharacterLayersAndCustomTextures(
|
||||
characterLayers: string[],
|
||||
memberTextures: CharacterTexture[]
|
||||
): CharacterLayer[] {
|
||||
const characterLayerObjs: CharacterLayer[] = [];
|
||||
for (const characterLayer of characterLayers) {
|
||||
if (characterLayer.startsWith('customCharacterTexture')) {
|
||||
if (characterLayer.startsWith("customCharacterTexture")) {
|
||||
const customCharacterLayerId: number = +characterLayer.substr(22);
|
||||
for (const memberTexture of memberTextures) {
|
||||
if (memberTexture.id == customCharacterLayerId) {
|
||||
characterLayerObjs.push({
|
||||
name: characterLayer,
|
||||
url: memberTexture.url
|
||||
})
|
||||
url: memberTexture.url,
|
||||
});
|
||||
break;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
characterLayerObjs.push({
|
||||
name: characterLayer,
|
||||
url: undefined
|
||||
})
|
||||
url: undefined,
|
||||
});
|
||||
}
|
||||
}
|
||||
return characterLayerObjs;
|
||||
|
@ -572,7 +589,7 @@ export class SocketManager implements ZoneEventListener {
|
|||
|
||||
emitInBatch(listener, subMessage);
|
||||
}
|
||||
|
||||
|
||||
public emitWorldFullMessage(client: WebSocket) {
|
||||
const errorMessage = new WorldFullMessage();
|
||||
|
||||
|
@ -594,9 +611,9 @@ export class SocketManager implements ZoneEventListener {
|
|||
|
||||
private refreshRoomData(roomId: string, versionNumber: number): void {
|
||||
const room = this.rooms.get(roomId);
|
||||
//this function is run for every users connected to the room, so we need to make sure the room wasn't already refreshed.
|
||||
//this function is run for every users connected to the room, so we need to make sure the room wasn't already refreshed.
|
||||
if (!room || !room.needsUpdate(versionNumber)) return;
|
||||
|
||||
|
||||
this.updateRoomWithAdminData(room);
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue