From 494913d3b9cda53c22cfd06dda49622575724a29 Mon Sep 17 00:00:00 2001 From: Adam <897017+aSemy@users.noreply.github.com> Date: Mon, 21 Feb 2022 15:36:12 +0100 Subject: [PATCH] fix init of global vars, make MapTile DTO more concise, and version bump --- build.gradle.kts | 2 +- .../events-mod/src/main/typescript/control.ts | 39 ++++++++++-- .../generated/kafkatorio-schema/schema.d.ts | 5 +- .../typescript/main/cache/EventDataCache.ts | 16 ++--- .../typescript/main/cache/cacheChecker.ts | 20 ++++--- .../handleConfigurationUpdate.ts | 8 +-- .../main/config-update/prototypes.ts | 4 +- .../main/config-update/updateGlobal.ts | 4 -- .../main/typescript/main/events/converters.ts | 5 +- .../main/typescript/main/events/handlers.ts | 5 +- .../main/events/registerHandlers.ts | 59 ++++++++----------- .../src/main/typescript/package-lock.json | 2 +- .../src/main/typescript/package.json | 14 +++-- .../src/main/typescript/tsconfig.json | 2 +- .../events/schema/factorioCommonData.kt | 5 +- .../events/schema/factorioPrototypes.kt | 2 +- .../events/schema/FactorioEventTest.kt | 52 ++++++++-------- .../processor/topology/groupMapChunks.kt | 4 ++ .../processor/topology/prototypes.kt | 9 +-- modules/infra-factorio-server/src/.env | 2 +- modules/infra-kafka-cluster/src/.env | 2 +- modules/infra-kafka-pipe/src/.env | 2 +- 22 files changed, 137 insertions(+), 126 deletions(-) delete mode 100644 modules/events-mod/src/main/typescript/main/config-update/updateGlobal.ts diff --git a/build.gradle.kts b/build.gradle.kts index 5ce154b..60b1341 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -8,7 +8,7 @@ plugins { } group = "dev.adamko.kafkatorio" -version = "0.3.0" +version = "0.3.2" val licenseFile: RegularFile by extra(layout.projectDirectory.file("LICENSE")) diff --git a/modules/events-mod/src/main/typescript/control.ts b/modules/events-mod/src/main/typescript/control.ts index 296e0ce..f97e909 100644 --- a/modules/events-mod/src/main/typescript/control.ts +++ b/modules/events-mod/src/main/typescript/control.ts @@ -1,15 +1,44 @@ -import {handleConfigurationUpdate} from "./main/config-update/handleConfigurationUpdate"; +import {emitConfigurationUpdate} from "./main/config-update/handleConfigurationUpdate"; import {emitPrototypes} from "./main/config-update/prototypes"; import {Queue} from "./main/queue/queue"; import {EventDataCache} from "./main/cache/EventDataCache"; require("./main/events/registerHandlers") require("./main/commands/kafkatorioCommands") +require("./main/cache/cacheChecker") + +script.on_configuration_changed((data: ConfigurationChangedData) => { + // runs whenever the version of the base game, or a mod, changes + + reInitGlobal() + emitConfigurationUpdate(data) + emitPrototypes() +}) -script.on_configuration_changed(handleConfigurationUpdate) script.on_init(() => { - Queue.reset() - emitPrototypes() - EventDataCache.init() + // runs only once (when the mod is first added to the save) + initGlobal() }) + + +function initGlobal() { + log("Initialising Kafkatorio Global variables...") + + Queue.init() + EventDataCache.init() + + log("Finished initialising Kafkatorio Global variables") +} + +function reInitGlobal() { + log("Re-initialising Kafkatorio Global variables...") + + global.MOD_VERSION = script.active_mods[script.mod_name] + global.FACTORIO_VERSION = script.active_mods["base"] + + Queue.reset() + EventDataCache.reset() + + log("Finished re-initialising Kafkatorio Global variables") +} diff --git a/modules/events-mod/src/main/typescript/generated/kafkatorio-schema/schema.d.ts b/modules/events-mod/src/main/typescript/generated/kafkatorio-schema/schema.d.ts index 41a6c66..e200e6e 100644 --- a/modules/events-mod/src/main/typescript/generated/kafkatorio-schema/schema.d.ts +++ b/modules/events-mod/src/main/typescript/generated/kafkatorio-schema/schema.d.ts @@ -89,8 +89,9 @@ interface MapChunkPosition { } interface MapTile { - position: MapTilePosition; - prototypeName: string; + proto: string; + x: int; + y: int; } interface EntityIdentifiers { diff --git a/modules/events-mod/src/main/typescript/main/cache/EventDataCache.ts b/modules/events-mod/src/main/typescript/main/cache/EventDataCache.ts index 7c9225a..4caddfa 100644 --- a/modules/events-mod/src/main/typescript/main/cache/EventDataCache.ts +++ b/modules/events-mod/src/main/typescript/main/cache/EventDataCache.ts @@ -5,20 +5,20 @@ export namespace EventDataCache { declare const global: { cache: LuaTable, CacheEntry>, - DEFAULT_CACHE_DURATION_TICKS: LuaTable, DEFAULT_CACHE_DURATION_TICKS2: Record, - MAP_CHUNK_CACHE_DURATION_TICKS: uint, + } + + + export function reset() { + log("Resetting EventDataCache") + global.cache = new LuaTable, CacheEntry>() } export function init() { if (typeof global.cache == undefined) { - global.cache = new LuaTable, CacheEntry>() - - global.DEFAULT_CACHE_DURATION_TICKS = new LuaTable() - global.DEFAULT_CACHE_DURATION_TICKS.set("PLAYER", 30) // 0.5 seconds - global.DEFAULT_CACHE_DURATION_TICKS.set("MAP_CHUNK", 60 * 15) // ~ 15 seconds - global.DEFAULT_CACHE_DURATION_TICKS.set("ENTITY", 60 * 2) // ~2 seconds + log("Initialising EventDataCache") + reset() global.DEFAULT_CACHE_DURATION_TICKS2 = { "PLAYER": 30, // 0.5 seconds diff --git a/modules/events-mod/src/main/typescript/main/cache/cacheChecker.ts b/modules/events-mod/src/main/typescript/main/cache/cacheChecker.ts index e0d918c..119046d 100644 --- a/modules/events-mod/src/main/typescript/main/cache/cacheChecker.ts +++ b/modules/events-mod/src/main/typescript/main/cache/cacheChecker.ts @@ -6,16 +6,20 @@ script.on_nth_tick(6, (nthTick: NthTickEventData) => { const cachedEvents: Array> = EventDataCache.extractExpired() - for (const event of cachedEvents) { + if (cachedEvents.length > 0) { + log(`nth tick ${nthTick.tick} has ${cachedEvents.length} events`) - const packet: FactorioEventUpdatePacket = { - tick: nthTick.tick, - modVersion: global.MOD_VERSION, - packetType: "UPDATE", - update: event, + for (const event of cachedEvents) { + + const packet: FactorioEventUpdatePacket = { + tick: nthTick.tick, + modVersion: global.MOD_VERSION, + packetType: "UPDATE", + update: event, + } + + emitPacket(packet) } - - emitPacket(packet) } }) diff --git a/modules/events-mod/src/main/typescript/main/config-update/handleConfigurationUpdate.ts b/modules/events-mod/src/main/typescript/main/config-update/handleConfigurationUpdate.ts index 8bb456f..dab8aef 100644 --- a/modules/events-mod/src/main/typescript/main/config-update/handleConfigurationUpdate.ts +++ b/modules/events-mod/src/main/typescript/main/config-update/handleConfigurationUpdate.ts @@ -1,10 +1,6 @@ import {emitPacket} from "../emitKafkatorioPacket"; -import {updateGlobal} from "./updateGlobal"; -import {emitPrototypes} from "./prototypes"; -import {Queue} from "../queue/queue"; -export function handleConfigurationUpdate(changeData: ConfigurationChangedData) { - updateGlobal() +export function emitConfigurationUpdate(changeData: ConfigurationChangedData) { emitPacket({ modVersion: global.MOD_VERSION, @@ -13,8 +9,6 @@ export function handleConfigurationUpdate(changeData: ConfigurationChangedData) factorioData: factorioData(changeData) }) - Queue.reset() - emitPrototypes() } function factorioData(changeData: ConfigurationChangedData): FactorioGameDataUpdate { diff --git a/modules/events-mod/src/main/typescript/main/config-update/prototypes.ts b/modules/events-mod/src/main/typescript/main/config-update/prototypes.ts index 8b494da..d4d2bfe 100644 --- a/modules/events-mod/src/main/typescript/main/config-update/prototypes.ts +++ b/modules/events-mod/src/main/typescript/main/config-update/prototypes.ts @@ -1,6 +1,6 @@ import {Converters} from "../events/converters"; import {emitPacket} from "../emitKafkatorioPacket"; -// import { global } from "../global"; + export function emitPrototypes() { emitPacket({ @@ -20,7 +20,7 @@ function prototypes(): FactorioPrototype[] { function getMapTilePrototypes(): MapTilePrototype[] { let tiles: MapTilePrototype[] = [] - for (let [, tile] of pairs(game.tile_prototypes)) { + for (let [, tile] of game.tile_prototypes) { tiles.push( { prototypeObjectName: tile.object_name, diff --git a/modules/events-mod/src/main/typescript/main/config-update/updateGlobal.ts b/modules/events-mod/src/main/typescript/main/config-update/updateGlobal.ts deleted file mode 100644 index c81be94..0000000 --- a/modules/events-mod/src/main/typescript/main/config-update/updateGlobal.ts +++ /dev/null @@ -1,4 +0,0 @@ -export function updateGlobal() { - global.MOD_VERSION = script.active_mods[script.mod_name] - global.FACTORIO_VERSION = script.active_mods["base"] -} diff --git a/modules/events-mod/src/main/typescript/main/events/converters.ts b/modules/events-mod/src/main/typescript/main/events/converters.ts index 7acecb2..b4bc12d 100644 --- a/modules/events-mod/src/main/typescript/main/events/converters.ts +++ b/modules/events-mod/src/main/typescript/main/events/converters.ts @@ -99,8 +99,9 @@ export namespace Converters { export function convertTile(tile: LuaTile): MapTile { return { - position: mapTilePosition(tile.position), - prototypeName: tile.prototype.name, + x: tile.position.x, + y: tile.position.y, + proto: tile.prototype.name, } } diff --git a/modules/events-mod/src/main/typescript/main/events/handlers.ts b/modules/events-mod/src/main/typescript/main/events/handlers.ts index 2feb68c..5fffc85 100644 --- a/modules/events-mod/src/main/typescript/main/events/handlers.ts +++ b/modules/events-mod/src/main/typescript/main/events/handlers.ts @@ -92,8 +92,9 @@ export function handleTilesUpdate( let convertedTiles: MapTile[] = updatedTiles.map((it) => { return { - position: it.position, // TODO use converters for LuaTile - prototypeName: newTileType.name, + x: it.position.x, + y: it.position.y, + proto: newTileType.name } }) diff --git a/modules/events-mod/src/main/typescript/main/events/registerHandlers.ts b/modules/events-mod/src/main/typescript/main/events/registerHandlers.ts index 339ce17..763aae5 100644 --- a/modules/events-mod/src/main/typescript/main/events/registerHandlers.ts +++ b/modules/events-mod/src/main/typescript/main/events/registerHandlers.ts @@ -2,9 +2,8 @@ import { handleChunkUpdate, handleConsoleChat, handleEntityUpdate, - // handlePlayerUpdate, handleSurfaceUpdate, - handleTilesUpdate + // handleTilesUpdate } from "./handlers"; import {Queue} from "../queue/queue"; import {EventName} from "../types"; @@ -15,18 +14,6 @@ for (const [eventName, eventId] of pairs(defines.events)) { mapEventIdToName.set(eventId, eventName) } -// const mapEventIdToDefinedType = new LuaTable, EventId>() -// for (const [eventName, eventId] of pairs(defines.events)) { -// let definedType = defines.events[eventName] -// mapEventIdToDefinedType.set(eventId, definedType) -// } - -// script.on_event( -// [defines.events.on_pre_build, defines.events.on_player_dropped_item], -// (e: OnPreBuildEvent | OnPlayerDroppedItemEvent) => { -// game.print("player " + e.player_index + " dropped item, tick:" + e.tick) -// } -// ); script.on_event( defines.events.on_player_mined_entity, @@ -91,25 +78,25 @@ script.on_event( } ) -script.on_event( - defines.events.on_chunk_generated, - (e: OnChunkGeneratedEvent) => { - handleChunkUpdate(e.tick, mapEventIdToName.get(e.name), e.surface.index, e.position, e.area) - } -) - -script.on_event( - [ - defines.events.on_player_built_tile, - defines.events.on_robot_built_tile, - ], - (builtTilesEvent) => { - handleTilesUpdate( - builtTilesEvent.tick, - mapEventIdToName.get(builtTilesEvent.name), - builtTilesEvent.surface_index, - builtTilesEvent.tile, - builtTilesEvent.tiles, - ) - } -) +// script.on_event( +// defines.events.on_chunk_generated, +// (e: OnChunkGeneratedEvent) => { +// handleChunkUpdate(e.tick, mapEventIdToName.get(e.name), e.surface.index, e.position, e.area) +// } +// ) +// +// script.on_event( +// [ +// defines.events.on_player_built_tile, +// defines.events.on_robot_built_tile, +// ], +// (builtTilesEvent) => { +// handleTilesUpdate( +// builtTilesEvent.tick, +// mapEventIdToName.get(builtTilesEvent.name), +// builtTilesEvent.surface_index, +// builtTilesEvent.tile, +// builtTilesEvent.tiles, +// ) +// } +// ) diff --git a/modules/events-mod/src/main/typescript/package-lock.json b/modules/events-mod/src/main/typescript/package-lock.json index a065da6..c8fc916 100644 --- a/modules/events-mod/src/main/typescript/package-lock.json +++ b/modules/events-mod/src/main/typescript/package-lock.json @@ -1,6 +1,6 @@ { "name": "kafkatorio-events-mod", - "version": "0.3.0", + "version": "0.3.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/modules/events-mod/src/main/typescript/package.json b/modules/events-mod/src/main/typescript/package.json index a14305b..90084ae 100644 --- a/modules/events-mod/src/main/typescript/package.json +++ b/modules/events-mod/src/main/typescript/package.json @@ -1,6 +1,6 @@ { "name": "kafkatorio-events-mod", - "version": "0.3.0", + "version": "0.3.2", "private": true, "scripts": { "build": "tstl", @@ -9,7 +9,8 @@ "engines": { "node": ">=10.13.0" }, - "devDependencies": {}, + "devDependencies": { + }, "dependencies": { "lua-types": "^2.11.0", "@types/node": "^12.0.8", @@ -18,7 +19,10 @@ "typescript": "4.5.5" }, "license": "UNLICENSED", - "peerDependencies": {}, - "optionalDependencies": {}, - "bundledDependencies": [] + "peerDependencies": { + }, + "optionalDependencies": { + }, + "bundledDependencies": [ + ] } diff --git a/modules/events-mod/src/main/typescript/tsconfig.json b/modules/events-mod/src/main/typescript/tsconfig.json index 87b2667..e7fb1ff 100644 --- a/modules/events-mod/src/main/typescript/tsconfig.json +++ b/modules/events-mod/src/main/typescript/tsconfig.json @@ -34,6 +34,6 @@ "tstlVerbose": true, "noHeader": true, "noImplicitSelf": true, - "luaLibImport": "inline" + "luaLibImport": "require" } } diff --git a/modules/events-schema/src/commonMain/kotlin/dev/adamko/kafkatorio/events/schema/factorioCommonData.kt b/modules/events-schema/src/commonMain/kotlin/dev/adamko/kafkatorio/events/schema/factorioCommonData.kt index 0ce9fe3..3ea33fd 100644 --- a/modules/events-schema/src/commonMain/kotlin/dev/adamko/kafkatorio/events/schema/factorioCommonData.kt +++ b/modules/events-schema/src/commonMain/kotlin/dev/adamko/kafkatorio/events/schema/factorioCommonData.kt @@ -98,8 +98,9 @@ data class ColourHex( @Serializable data class MapTile( - val prototypeName: PrototypeName, - val position: MapTilePosition, + val x: Int, + val y: Int, + val proto: PrototypeName, ) diff --git a/modules/events-schema/src/commonMain/kotlin/dev/adamko/kafkatorio/events/schema/factorioPrototypes.kt b/modules/events-schema/src/commonMain/kotlin/dev/adamko/kafkatorio/events/schema/factorioPrototypes.kt index 0cce79d..0fb80b2 100644 --- a/modules/events-schema/src/commonMain/kotlin/dev/adamko/kafkatorio/events/schema/factorioPrototypes.kt +++ b/modules/events-schema/src/commonMain/kotlin/dev/adamko/kafkatorio/events/schema/factorioPrototypes.kt @@ -64,7 +64,7 @@ object FactorioPrototypeJsonSerializer : JsonContentPolymorphicSerializer