diff --git a/src/editor-api/realtime/asset.ts b/src/editor-api/realtime/asset.ts
index a3a78ad3d..0e803573e 100644
--- a/src/editor-api/realtime/asset.ts
+++ b/src/editor-api/realtime/asset.ts
@@ -131,7 +131,7 @@ class RealtimeAsset extends Events {
}
_onOp(ops: any, local: boolean) {
- if (local) {
+ if (local || !this._loaded) {
return;
}
diff --git a/src/editor/alerts/alert-connection.ts b/src/editor/alerts/alert-connection.ts
index 81843ae7c..47478b841 100644
--- a/src/editor/alerts/alert-connection.ts
+++ b/src/editor/alerts/alert-connection.ts
@@ -120,7 +120,7 @@ editor.once('load', () => {
editor.on('viewport:error', (err) => {
viewportError = true;
- log.error(err);
+ console.error(err);
console.trace();
content.innerHTML = 'Failed creating WebGL Context.
Please check WebGL Report and report to Forum.';
overlay.hidden = false;
diff --git a/src/editor/assets/assets-rename.ts b/src/editor/assets/assets-rename.ts
index 07e474bea..dae775df4 100644
--- a/src/editor/assets/assets-rename.ts
+++ b/src/editor/assets/assets-rename.ts
@@ -2,7 +2,7 @@ editor.once('load', () => {
const changeName = function (assetId: string | number, assetName: string) {
editor.api.globals.rest.assets.assetUpdate(assetId, { name: assetName })
.on('error', (err, data) => {
- log.error`rename error: ${err} ${data}`;
+ console.warn(`rename error: ${err} ${data}`);
editor.call('status:error', `Couldn't update the name: ${data}`);
});
};
diff --git a/src/editor/entities/entities-treeview.ts b/src/editor/entities/entities-treeview.ts
index 343960c48..33994626f 100644
--- a/src/editor/entities/entities-treeview.ts
+++ b/src/editor/entities/entities-treeview.ts
@@ -810,7 +810,7 @@ class EntitiesTreeView extends TreeView {
if (child) {
treeViewItem.append(this._onAddEntity(child));
} else {
- log.error`cannot find child entity ${childId} of parent ${entity.get('name')} (${resourceId})`;
+ console.warn(`cannot find child entity ${childId} of parent ${entity.get('name')} (${resourceId})`);
editor.call('status:error', `Cannot find child entity ${childId} of parent "${entity.get('name')}" (${resourceId})`);
}
}
diff --git a/src/editor/relay/relay-server.ts b/src/editor/relay/relay-server.ts
index 780204985..bc856b41a 100644
--- a/src/editor/relay/relay-server.ts
+++ b/src/editor/relay/relay-server.ts
@@ -40,6 +40,8 @@ class RelayServer extends Events {
private _rooms: Record>;
+ private _pendingRooms: Set;
+
private _userId: number | null;
private socket: WebSocket;
@@ -54,6 +56,7 @@ class RelayServer extends Events {
this._pingTimeout = null;
this._pongTimeout = null;
this._rooms = {};
+ this._pendingRooms = new Set();
this._userId = null;
this.on('welcome', (data) => {
@@ -150,6 +153,7 @@ class RelayServer extends Events {
});
}
this._rooms = {};
+ this._pendingRooms.clear();
this.emit('disconnect');
@@ -194,6 +198,8 @@ class RelayServer extends Events {
}
_handleRoomJoin(msg: { t: string; name: string; users?: number[]; userId?: number }) {
+ this._pendingRooms.delete(msg.name);
+
if (msg.users) {
this._rooms[msg.name] = new Set(msg.users);
} else if (msg.userId) {
@@ -281,7 +287,7 @@ class RelayServer extends Events {
* @param msg - The message data
*/
send(msg: string | object) {
- if (!this._connected) {
+ if (!this._connected || this.socket.readyState !== WebSocket.OPEN) {
return;
}
@@ -319,6 +325,11 @@ class RelayServer extends Events {
* @param authentication - The authentication handling of the room.
*/
joinRoom(name: string, authentication: RoomAuthentication) {
+ if (this._rooms[name] || this._pendingRooms.has(name)) {
+ return;
+ }
+
+ this._pendingRooms.add(name);
this.send({
t: 'room:join',
name: name,