mirror of
https://github.com/openfrontio/OpenFrontIO.git
synced 2026-06-29 03:44:40 +00:00
5a8c0b636d
- Extend SharedTileRing to include a shared dirtyFlags buffer alongside header and data - Pass shared dirty buffer through WorkerClient/WorkerMessages and initialize views in Worker.worker - In SAB mode, mark tiles dirty via Atomics.compareExchange before enqueuing to ensure each tile is queued at most once until processed - On the main thread, clear dirty flags when draining the ring and build packedTileUpdates from distinct tile refs - Keep non-SAB behaviour unchanged while reducing ring pressure and making overflows reflect true backlog, not duplicate updates
133 lines
3.3 KiB
TypeScript
133 lines
3.3 KiB
TypeScript
import {
|
|
PlayerActions,
|
|
PlayerBorderTiles,
|
|
PlayerID,
|
|
PlayerProfile,
|
|
} from "../game/Game";
|
|
import { TileRef } from "../game/GameMap";
|
|
import { GameUpdateViewData } from "../game/GameUpdates";
|
|
import { ClientID, GameStartInfo, Turn } from "../Schemas";
|
|
|
|
export type WorkerMessageType =
|
|
| "init"
|
|
| "initialized"
|
|
| "turn"
|
|
| "game_update"
|
|
| "player_actions"
|
|
| "player_actions_result"
|
|
| "player_profile"
|
|
| "player_profile_result"
|
|
| "player_border_tiles"
|
|
| "player_border_tiles_result"
|
|
| "attack_average_position"
|
|
| "attack_average_position_result"
|
|
| "transport_ship_spawn"
|
|
| "transport_ship_spawn_result";
|
|
|
|
// Base interface for all messages
|
|
interface BaseWorkerMessage {
|
|
type: WorkerMessageType;
|
|
id?: string;
|
|
}
|
|
|
|
// Messages from main thread to worker
|
|
export interface InitMessage extends BaseWorkerMessage {
|
|
type: "init";
|
|
gameStartInfo: GameStartInfo;
|
|
clientID: ClientID;
|
|
sharedTileRingHeader?: SharedArrayBuffer;
|
|
sharedTileRingData?: SharedArrayBuffer;
|
|
sharedStateBuffer?: SharedArrayBuffer;
|
|
sharedDirtyBuffer?: SharedArrayBuffer;
|
|
}
|
|
|
|
export interface TurnMessage extends BaseWorkerMessage {
|
|
type: "turn";
|
|
turn: Turn;
|
|
}
|
|
|
|
// Messages from worker to main thread
|
|
export interface InitializedMessage extends BaseWorkerMessage {
|
|
type: "initialized";
|
|
}
|
|
|
|
export interface GameUpdateMessage extends BaseWorkerMessage {
|
|
type: "game_update";
|
|
gameUpdate: GameUpdateViewData;
|
|
}
|
|
|
|
export interface PlayerActionsMessage extends BaseWorkerMessage {
|
|
type: "player_actions";
|
|
playerID: PlayerID;
|
|
x?: number;
|
|
y?: number;
|
|
}
|
|
|
|
export interface PlayerActionsResultMessage extends BaseWorkerMessage {
|
|
type: "player_actions_result";
|
|
result: PlayerActions;
|
|
}
|
|
|
|
export interface PlayerProfileMessage extends BaseWorkerMessage {
|
|
type: "player_profile";
|
|
playerID: number;
|
|
}
|
|
|
|
export interface PlayerProfileResultMessage extends BaseWorkerMessage {
|
|
type: "player_profile_result";
|
|
result: PlayerProfile;
|
|
}
|
|
|
|
export interface PlayerBorderTilesMessage extends BaseWorkerMessage {
|
|
type: "player_border_tiles";
|
|
playerID: PlayerID;
|
|
}
|
|
|
|
export interface PlayerBorderTilesResultMessage extends BaseWorkerMessage {
|
|
type: "player_border_tiles_result";
|
|
result: PlayerBorderTiles;
|
|
}
|
|
|
|
export interface AttackAveragePositionMessage extends BaseWorkerMessage {
|
|
type: "attack_average_position";
|
|
playerID: number;
|
|
attackID: string;
|
|
}
|
|
|
|
export interface AttackAveragePositionResultMessage extends BaseWorkerMessage {
|
|
type: "attack_average_position_result";
|
|
x: number | null;
|
|
y: number | null;
|
|
}
|
|
|
|
export interface TransportShipSpawnMessage extends BaseWorkerMessage {
|
|
type: "transport_ship_spawn";
|
|
playerID: PlayerID;
|
|
targetTile: TileRef;
|
|
}
|
|
|
|
export interface TransportShipSpawnResultMessage extends BaseWorkerMessage {
|
|
type: "transport_ship_spawn_result";
|
|
result: TileRef | false;
|
|
}
|
|
|
|
// Union types for type safety
|
|
export type MainThreadMessage =
|
|
| InitMessage
|
|
| TurnMessage
|
|
| PlayerActionsMessage
|
|
| PlayerProfileMessage
|
|
| PlayerBorderTilesMessage
|
|
| AttackAveragePositionMessage
|
|
| TransportShipSpawnMessage;
|
|
|
|
// Message send from worker
|
|
export type WorkerMessage =
|
|
| InitializedMessage
|
|
| GameUpdateMessage
|
|
| PlayerActionsResultMessage
|
|
| PlayerProfileResultMessage
|
|
| PlayerBorderTilesResultMessage
|
|
| AttackAveragePositionResultMessage
|
|
| TransportShipSpawnResultMessage;
|