mirror of
https://github.com/openfrontio/OpenFrontIO.git
synced 2026-07-16 02:19:49 +00:00
Connection status monitoring
This commit is contained in:
+9
-7
@@ -34,7 +34,7 @@ export type Intent =
|
||||
| EmbargoIntent
|
||||
| QuickChatIntent
|
||||
| MoveWarshipIntent
|
||||
| MarkIdleIntent;
|
||||
| MarkDisconnectedIntent;
|
||||
|
||||
export type AttackIntent = z.infer<typeof AttackIntentSchema>;
|
||||
export type CancelAttackIntent = z.infer<typeof CancelAttackIntentSchema>;
|
||||
@@ -57,7 +57,9 @@ export type TargetTroopRatioIntent = z.infer<
|
||||
export type BuildUnitIntent = z.infer<typeof BuildUnitIntentSchema>;
|
||||
export type MoveWarshipIntent = z.infer<typeof MoveWarshipIntentSchema>;
|
||||
export type QuickChatIntent = z.infer<typeof QuickChatIntentSchema>;
|
||||
export type MarkIdleIntent = z.infer<typeof MarkIdleIntentSchema>;
|
||||
export type MarkDisconnectedIntent = z.infer<
|
||||
typeof MarkDisconnectedIntentSchema
|
||||
>;
|
||||
|
||||
export type Turn = z.infer<typeof TurnSchema>;
|
||||
export type GameConfig = z.infer<typeof GameConfigSchema>;
|
||||
@@ -168,7 +170,7 @@ const BaseIntentSchema = z.object({
|
||||
"attack",
|
||||
"cancel_attack",
|
||||
"spawn",
|
||||
"mark_idle",
|
||||
"mark_disconnected",
|
||||
"boat",
|
||||
"cancel_boat",
|
||||
"name",
|
||||
@@ -293,16 +295,16 @@ export const QuickChatIntentSchema = BaseIntentSchema.extend({
|
||||
variables: z.record(SafeString).optional(),
|
||||
});
|
||||
|
||||
export const MarkIdleIntentSchema = BaseIntentSchema.extend({
|
||||
type: z.literal("mark_idle"),
|
||||
isIdle: z.boolean(),
|
||||
export const MarkDisconnectedIntentSchema = BaseIntentSchema.extend({
|
||||
type: z.literal("mark_disconnected"),
|
||||
isDisconnected: z.boolean(),
|
||||
});
|
||||
|
||||
const IntentSchema = z.union([
|
||||
AttackIntentSchema,
|
||||
CancelAttackIntentSchema,
|
||||
SpawnIntentSchema,
|
||||
MarkIdleIntentSchema,
|
||||
MarkDisconnectedIntentSchema,
|
||||
BoatAttackIntentSchema,
|
||||
CancelBoatIntentSchema,
|
||||
AllianceRequestIntentSchema,
|
||||
|
||||
@@ -15,7 +15,7 @@ import { DonateTroopsExecution } from "./DonateTroopExecution";
|
||||
import { EmbargoExecution } from "./EmbargoExecution";
|
||||
import { EmojiExecution } from "./EmojiExecution";
|
||||
import { FakeHumanExecution } from "./FakeHumanExecution";
|
||||
import { MarkIdleExecution } from "./MarkIdleExecution";
|
||||
import { MarkDisconnectedExecution } from "./MarkDisconnectedExecution";
|
||||
import { MoveWarshipExecution } from "./MoveWarshipExecution";
|
||||
import { NoOpExecution } from "./NoOpExecution";
|
||||
import { QuickChatExecution } from "./QuickChatExecution";
|
||||
@@ -121,8 +121,8 @@ export class Executor {
|
||||
intent.quickChatKey,
|
||||
intent.variables ?? {},
|
||||
);
|
||||
case "mark_idle":
|
||||
return new MarkIdleExecution(playerID, intent.isIdle);
|
||||
case "mark_disconnected":
|
||||
return new MarkDisconnectedExecution(playerID, intent.isDisconnected);
|
||||
default:
|
||||
throw new Error(`intent type ${intent} not found`);
|
||||
}
|
||||
|
||||
+5
-5
@@ -1,18 +1,18 @@
|
||||
import { Execution, Game, Player, PlayerID } from "../game/Game";
|
||||
|
||||
export class MarkIdleExecution implements Execution {
|
||||
export class MarkDisconnectedExecution implements Execution {
|
||||
private player: Player;
|
||||
private active: boolean = true;
|
||||
|
||||
constructor(
|
||||
private playerID: PlayerID,
|
||||
private isIdle: boolean,
|
||||
private isDisconnected: boolean,
|
||||
) {}
|
||||
|
||||
init(mg: Game, ticks: number): void {
|
||||
if (!mg.hasPlayer(this.playerID)) {
|
||||
console.warn(
|
||||
`MarkIdleExecution: player ${this.playerID} not found in game`,
|
||||
`MarkDisconnectedExecution: player ${this.playerID} not found in game`,
|
||||
);
|
||||
this.active = false;
|
||||
return;
|
||||
@@ -21,7 +21,7 @@ export class MarkIdleExecution implements Execution {
|
||||
this.player = mg.player(this.playerID);
|
||||
if (!this.player) {
|
||||
console.warn(
|
||||
`MarkIdleExecution: failed to retrieve player ${this.playerID}`,
|
||||
`MarkDisconnectedExecution: failed to retrieve player ${this.playerID}`,
|
||||
);
|
||||
this.active = false;
|
||||
return;
|
||||
@@ -29,7 +29,7 @@ export class MarkIdleExecution implements Execution {
|
||||
}
|
||||
|
||||
tick(ticks: number): void {
|
||||
this.player.markIdle(this.isIdle);
|
||||
this.player.markDisconnected(this.isDisconnected);
|
||||
this.active = false;
|
||||
}
|
||||
|
||||
@@ -433,8 +433,8 @@ export interface Player {
|
||||
largestClusterBoundingBox: { min: Cell; max: Cell } | null;
|
||||
lastTileChange(): Tick;
|
||||
|
||||
isIdle(): boolean;
|
||||
markIdle(isIdle: boolean): void;
|
||||
isDisconnected(): boolean;
|
||||
markDisconnected(isDisconnected: boolean): void;
|
||||
|
||||
hasSpawned(): boolean;
|
||||
setHasSpawned(hasSpawned: boolean): void;
|
||||
|
||||
@@ -102,7 +102,7 @@ export interface PlayerUpdate {
|
||||
smallID: number;
|
||||
playerType: PlayerType;
|
||||
isAlive: boolean;
|
||||
isIdle: boolean;
|
||||
isDisconnected: boolean;
|
||||
tilesOwned: number;
|
||||
gold: number;
|
||||
population: number;
|
||||
|
||||
@@ -292,8 +292,8 @@ export class PlayerView {
|
||||
hasSpawned(): boolean {
|
||||
return this.data.hasSpawned;
|
||||
}
|
||||
isIdle(): boolean {
|
||||
return this.data.isIdle;
|
||||
isDisconnected(): boolean {
|
||||
return this.data.isDisconnected;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -99,7 +99,7 @@ export class PlayerImpl implements Player {
|
||||
public _outgoingLandAttacks: Attack[] = [];
|
||||
|
||||
private _hasSpawned = false;
|
||||
private _isIdle = false;
|
||||
private _isDisconnected = false;
|
||||
|
||||
constructor(
|
||||
private mg: GameImpl,
|
||||
@@ -137,7 +137,7 @@ export class PlayerImpl implements Player {
|
||||
smallID: this.smallID(),
|
||||
playerType: this.type(),
|
||||
isAlive: this.isAlive(),
|
||||
isIdle: this.isIdle(),
|
||||
isDisconnected: this.isDisconnected(),
|
||||
tilesOwned: this.numTilesOwned(),
|
||||
gold: Number(this._gold),
|
||||
population: this.population(),
|
||||
@@ -927,12 +927,12 @@ export class PlayerImpl implements Player {
|
||||
return this._lastTileChange;
|
||||
}
|
||||
|
||||
isIdle(): boolean {
|
||||
return this._isIdle;
|
||||
isDisconnected(): boolean {
|
||||
return this._isDisconnected;
|
||||
}
|
||||
|
||||
markIdle(isIdle: boolean): void {
|
||||
this._isIdle = isIdle;
|
||||
markDisconnected(isDisconnected: boolean): void {
|
||||
this._isDisconnected = isDisconnected;
|
||||
}
|
||||
|
||||
hash(): number {
|
||||
|
||||
Reference in New Issue
Block a user