have clients send logs to server

This commit is contained in:
evanpelle
2024-12-17 17:14:24 -08:00
parent d26eddcf2d
commit 031f62c701
5 changed files with 60 additions and 6 deletions
-1
View File
@@ -248,7 +248,6 @@
* give naval units health * give naval units health
* bug: player names not updating sometimes * bug: player names not updating sometimes
* make player editeable configs * make player editeable configs
* games disconnects on multplayer after some time
* couldn't scroll left on build menu to deploy bombs (mobile) * couldn't scroll left on build menu to deploy bombs (mobile)
* UI/test too big on mobile * UI/test too big on mobile
* bug: build city 25k bump doesn't match troop/worker ratio * bug: build city 25k bump doesn't match troop/worker ratio
+16
View File
@@ -0,0 +1,16 @@
import { EventBus } from "../core/EventBus"
import { SendLogEvent } from "./Transport"
export enum LogSeverity {
Info,
Warn,
Error
}
export function initializeLogSender(eventBus: EventBus) {
const log = (msg: string): void => {
eventBus.emit(new SendLogEvent(LogSeverity.Info, msg))
console.log(msg)
}
console.log = log
}
+26 -1
View File
@@ -1,9 +1,10 @@
import { Config } from "../core/configuration/Config" import { Config } from "../core/configuration/Config"
import { EventBus, GameEvent } from "../core/EventBus" import { EventBus, GameEvent } from "../core/EventBus"
import { AllianceRequest, AllPlayers, Cell, GameType, Player, PlayerID, PlayerType, Tile, UnitType } from "../core/game/Game" import { AllianceRequest, AllPlayers, Cell, GameType, Player, PlayerID, PlayerType, Tile, UnitType } from "../core/game/Game"
import { ClientID, ClientIntentMessageSchema, ClientJoinMessageSchema, GameID, Intent, ServerMessage, ServerMessageSchema, ClientPingMessageSchema, GameConfig } from "../core/Schemas" import { ClientID, ClientIntentMessageSchema, ClientJoinMessageSchema, GameID, Intent, ServerMessage, ServerMessageSchema, ClientPingMessageSchema, GameConfig, ClientLogMessageSchema } from "../core/Schemas"
import { LobbyConfig } from "./GameRunner" import { LobbyConfig } from "./GameRunner"
import { LocalServer } from "./LocalServer" import { LocalServer } from "./LocalServer"
import { LogSeverity } from "./LogSender"
export class SendAllianceRequestIntentEvent implements GameEvent { export class SendAllianceRequestIntentEvent implements GameEvent {
@@ -82,6 +83,13 @@ export class SendSetTargetTroopRatioEvent implements GameEvent {
) { } ) { }
} }
export class SendLogEvent implements GameEvent {
constructor(
public readonly severity: LogSeverity,
public readonly log: string,
) { }
}
export class Transport { export class Transport {
private socket: WebSocket private socket: WebSocket
@@ -118,6 +126,8 @@ export class Transport {
this.eventBus.on(SendDonateIntentEvent, (e) => this.onSendDonateIntent(e)) this.eventBus.on(SendDonateIntentEvent, (e) => this.onSendDonateIntent(e))
this.eventBus.on(SendSetTargetTroopRatioEvent, (e) => this.onSendSetTargetTroopRatioEvent(e)) this.eventBus.on(SendSetTargetTroopRatioEvent, (e) => this.onSendSetTargetTroopRatioEvent(e))
this.eventBus.on(BuildUnitIntentEvent, (e) => this.onBuildUnitIntent(e)) this.eventBus.on(BuildUnitIntentEvent, (e) => this.onBuildUnitIntent(e))
this.eventBus.on(SendLogEvent, (e) => this.onSendLogEvent(e))
} }
private startPing() { private startPing() {
@@ -187,6 +197,20 @@ export class Transport {
}; };
} }
private onSendLogEvent(event: SendLogEvent) {
this.sendMsg(
JSON.stringify(
ClientLogMessageSchema.parse({
type: "log",
gameID: this.lobbyConfig.gameID,
clientID: this.lobbyConfig.clientID,
persistentID: this.lobbyConfig.persistentID,
log: event.log,
})
)
)
}
joinGame(numTurns: number) { joinGame(numTurns: number) {
this.sendMsg( this.sendMsg(
JSON.stringify( JSON.stringify(
@@ -218,6 +242,7 @@ export class Transport {
this.socket.onclose = (event: CloseEvent) => { } this.socket.onclose = (event: CloseEvent) => { }
} }
private onSendAllianceRequest(event: SendAllianceRequestIntentEvent) { private onSendAllianceRequest(event: SendAllianceRequestIntentEvent) {
this.sendIntent({ this.sendIntent({
type: "allianceRequest", type: "allianceRequest",
+15 -3
View File
@@ -31,7 +31,7 @@ export type BuildUnitIntent = z.infer<typeof BuildUnitIntentSchema>
export type Turn = z.infer<typeof TurnSchema> export type Turn = z.infer<typeof TurnSchema>
export type GameConfig = z.infer<typeof GameConfigSchema> export type GameConfig = z.infer<typeof GameConfigSchema>
export type ClientMessage = ClientPingMessage | ClientIntentMessage | ClientJoinMessage export type ClientMessage = ClientPingMessage | ClientIntentMessage | ClientJoinMessage | ClientLogMessage
export type ServerMessage = ServerSyncMessage | ServerStartGameMessage | ServerPingMessage export type ServerMessage = ServerSyncMessage | ServerStartGameMessage | ServerPingMessage
export type ServerSyncMessage = z.infer<typeof ServerTurnMessageSchema> export type ServerSyncMessage = z.infer<typeof ServerTurnMessageSchema>
@@ -41,6 +41,7 @@ export type ServerPingMessage = z.infer<typeof ServerPingMessageSchema>
export type ClientPingMessage = z.infer<typeof ClientPingMessageSchema> export type ClientPingMessage = z.infer<typeof ClientPingMessageSchema>
export type ClientIntentMessage = z.infer<typeof ClientIntentMessageSchema> export type ClientIntentMessage = z.infer<typeof ClientIntentMessageSchema>
export type ClientJoinMessage = z.infer<typeof ClientJoinMessageSchema> export type ClientJoinMessage = z.infer<typeof ClientJoinMessageSchema>
export type ClientLogMessage = z.infer<typeof ClientLogMessageSchema>
export type PlayerRecord = z.infer<typeof PlayerRecordSchema> export type PlayerRecord = z.infer<typeof PlayerRecordSchema>
export type GameRecord = z.infer<typeof GameRecordSchema> export type GameRecord = z.infer<typeof GameRecordSchema>
@@ -208,11 +209,17 @@ export const ServerMessageSchema = z.union([ServerTurnMessageSchema, ServerStart
// Client // Client
const ClientBaseMessageSchema = z.object({ const ClientBaseMessageSchema = z.object({
type: z.string(), type: z.enum(['join', 'intent', 'ping', 'log']),
clientID: z.string(), clientID: z.string(),
gameID: z.string(), gameID: z.string(),
}) })
export const ClientLogMessageSchema = ClientBaseMessageSchema.extend({
type: z.literal('log'),
severity: z.enum([''])
log: z.string(),
})
export const ClientPingMessageSchema = ClientBaseMessageSchema.extend({ export const ClientPingMessageSchema = ClientBaseMessageSchema.extend({
type: z.literal('ping'), type: z.literal('ping'),
}) })
@@ -230,7 +237,12 @@ export const ClientJoinMessageSchema = ClientBaseMessageSchema.extend({
username: z.string(), username: z.string(),
}) })
export const ClientMessageSchema = z.union([ClientPingMessageSchema, ClientIntentMessageSchema, ClientJoinMessageSchema]); export const ClientMessageSchema = z.union([
ClientPingMessageSchema,
ClientIntentMessageSchema,
ClientJoinMessageSchema,
ClientLogMessageSchema,
]);
export const PlayerRecordSchema = z.object({ export const PlayerRecordSchema = z.object({
clientID: z.string(), clientID: z.string(),
+3 -1
View File
@@ -122,7 +122,9 @@ wss.on('connection', (ws, req) => {
clientMsg.lastTurn clientMsg.lastTurn
) )
} }
// TODO: send error message if(clientMsg.type == "log") {
console.log()
}
}) })
}); });