Files
OpenFrontIO/src/client/LocalServer.ts
T
2024-10-12 18:20:41 -07:00

46 lines
1.2 KiB
TypeScript

import {Config} from "../core/configuration/Config";
import {ClientMessage, ClientMessageSchema, Intent, ServerMessage, ServerTurnMessageSchema, Turn} from "../core/Schemas";
export class LocalServer {
private gameID = "LOCAL"
private turns: Turn[] = []
private intents: Intent[] = []
private endTurnIntervalID
constructor(private config: Config, private clientConnect: () => void, private clientMessage: (message: ServerMessage) => void) {
}
start() {
this.endTurnIntervalID = setInterval(() => this.endTurn(), this.config.turnIntervalMs());
this.clientConnect()
this.clientMessage({
type: "start",
turns: [],
})
}
onMessage(message: string) {
const clientMsg: ClientMessage = ClientMessageSchema.parse(JSON.parse(message))
if (clientMsg.type == "intent") {
this.intents.push(clientMsg.intent)
}
}
private endTurn() {
const pastTurn: Turn = {
turnNumber: this.turns.length,
gameID: this.gameID,
intents: this.intents
}
this.turns.push(pastTurn)
this.intents = []
this.clientMessage({
type: "turn",
turn: pastTurn
})
}
}