Skip to content

Commit

Permalink
Store pending legacy object saves in dedicated array
Browse files Browse the repository at this point in the history
  • Loading branch information
Stalgia Grigg committed Jun 14, 2023
1 parent 826ec75 commit 11594ae
Show file tree
Hide file tree
Showing 7 changed files with 33 additions and 32 deletions.
23 changes: 11 additions & 12 deletions src/bit-systems/network-receive-system.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import {
localClientID,
networkedQuery,
pendingCreatorChanges,
pendingLegacyObjectSaves,
pendingMessages,
pendingParts,
softRemovedEntities
Expand Down Expand Up @@ -145,27 +146,25 @@ export function networkReceiveSystem(world: HubsWorld) {
}
}

// Handle save entity messages
for (let i = 0; i < pendingMessages.length; i++) {
const message = pendingMessages[i];

for (let j = 0; j < message.saves.length; j++) {
const { networkId: nidString } = message.saves[j];
{
// Save entity state for loaded legacy objects
pendingLegacyObjectSaves.forEach(nidString => {
const nid = APP.getSid(nidString);
const eid = world.nid2eid.get(nid);

if (!eid) {
console.warn(`Received save message for unknown entity ${nidString}.`);
continue;
console.warn(`Received save message for unknown legacy entity ${nidString}.`);
return;
}

if (!isNetworkInstantiated(eid)) {
console.warn(`Received save message for non-network-instantiated entity ${nidString}.`);
continue;
console.warn(`Received save message for non-network-instantiated legacy entity ${nidString}.`);
return;
}

createEntityState(APP.hubChannel!, world, eid);
}
});
pendingLegacyObjectSaves.length = 0;
}

{
Expand Down Expand Up @@ -206,7 +205,7 @@ export function networkReceiveSystem(world: HubsWorld) {
}

// Process the stored message before other updates
pendingMessages.unshift({ creates: [], updates, deletes: [], saves: [] });
pendingMessages.unshift({ creates: [], updates, deletes: [] });
storedUpdates.delete(nid);
}
});
Expand Down
10 changes: 9 additions & 1 deletion src/bit-systems/networking.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,13 @@
import { defineQuery } from "bitecs";
import { Networked } from "../bit-components";
import type { CreateMessageData, CreatorChange, EntityID, Message, StringID } from "../utils/networking-types";
import type {
CreateMessageData,
CreatorChange,
EntityID,
Message,
NetworkID,
StringID
} from "../utils/networking-types";
export let localClientID: StringID | null = null;
export function setLocalClientID(clientId: StringID) {
connectedClientIds.add(clientId);
Expand All @@ -12,6 +19,7 @@ export const connectedClientIds = new Set<StringID>();
export const disconnectedClientIds = new Set<StringID>();
export const pendingMessages: Message[] = [];
export const pendingCreatorChanges: CreatorChange[] = [];
export const pendingLegacyObjectSaves: NetworkID[] = [];
export const pendingJoins: StringID[] = [];
export const pendingParts: StringID[] = [];
export const softRemovedEntities = new Set<EntityID>();
Expand Down
4 changes: 3 additions & 1 deletion src/utils/entity-state-utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,9 @@ export function hasSavedEntityState(world: HubsWorld, eid: EntityID) {
export async function createEntityState(hubChannel: HubChannel, world: HubsWorld, eid: EntityID) {
const payload = createEntityStatePayload(world, eid);
// console.log("save_entity_state", payload);
return push(hubChannel, "save_entity_state", payload);
return push(hubChannel, "save_entity_state", payload).catch(err => {
console.warn("Failed to save entity state", err);
});
}

export async function updateEntityState(hubChannel: HubChannel, world: HubsWorld, eid: EntityID) {
Expand Down
3 changes: 1 addition & 2 deletions src/utils/listen-for-network-messages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,7 @@ export function queueEntityStateAsMessage(entityState: EntityState) {
fromClientId: "reticulum",
creates: [entityState.create_message],
updates: entityState.update_messages,
deletes: [],
saves: []
deletes: []
});
pendingCreatorChanges.push({
nid: rootNid,
Expand Down
9 changes: 8 additions & 1 deletion src/utils/load-legacy-room-objects.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { pendingMessages } from "../bit-systems/networking";
import { pendingLegacyObjectSaves, pendingMessages } from "../bit-systems/networking";
import { messageForLegacyRoomObjects } from "./message-for";
import { StorableMessage } from "./networking-types";
import { getReticulumFetchUrl } from "./phoenix-utils";
Expand Down Expand Up @@ -28,6 +28,13 @@ export async function loadLegacyRoomObjects(hubId: string) {

if (hubId === APP.hub!.hub_id) {
const message = messageForLegacyRoomObjects(legacyRoomObjects);

for (const obj of legacyRoomObjects) {
if (obj.extensions.HUBS_components.pinnable.pinned) {
pendingLegacyObjectSaves.push(obj.name);
}
}

if (message) {
message.fromClientId = "reticulum";

Expand Down
12 changes: 1 addition & 11 deletions src/utils/message-for.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ import type {
EntityID,
Message,
NetworkID,
SaveMessage,
StorableUpdateMessage
} from "./networking-types";

Expand All @@ -37,8 +36,7 @@ export function messageFor(
const message: Message = {
creates: [],
updates: [],
deletes: [],
saves: []
deletes: []
};

created.forEach(eid => {
Expand Down Expand Up @@ -112,7 +110,6 @@ export interface LegacyRoomObject {
export function messageForLegacyRoomObjects(objects: LegacyRoomObject[]) {
const message: Message = {
creates: [],
saves: [],
updates: [],
deletes: []
};
Expand All @@ -134,13 +131,6 @@ export function messageForLegacyRoomObjects(objects: LegacyRoomObject[]) {
};
message.creates.push(createMessage);

if (obj.extensions.HUBS_components.pinnable.pinned) {
const saveMessage: SaveMessage = {
networkId: nid
};
message.saves.push(saveMessage);
}

const updateMessage: StorableUpdateMessage = {
data: {
"networked-transform": {
Expand Down
4 changes: 0 additions & 4 deletions src/utils/networking-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,6 @@ export type CreateMessage = {
prefabName: PrefabName;
initialData: InitialData;
};
export type SaveMessage = {
networkId: NetworkID;
};
export interface CursorBuffer extends Array<any> {
cursor?: number;
}
Expand All @@ -41,7 +38,6 @@ export type Message = {
creates: CreateMessage[];
updates: UpdateMessage[];
deletes: DeleteMessage[];
saves: SaveMessage[];
};
export interface StorableMessage extends Message {
version: 1;
Expand Down

0 comments on commit 11594ae

Please sign in to comment.