diff --git a/modules/events-mod/package.json b/modules/events-mod/package.json index 4b3a926..50840cf 100644 --- a/modules/events-mod/package.json +++ b/modules/events-mod/package.json @@ -9,7 +9,8 @@ "engines": { "node": "~14.19.1" }, - "devDependencies": {}, + "devDependencies": { + }, "dependencies": { "lua-types": "^2.11.0", "typescript-to-lua": "1.6.0", @@ -17,7 +18,10 @@ "typescript": "4.7.4" }, "license": "UNLICENSED", - "peerDependencies": {}, - "optionalDependencies": {}, - "bundledDependencies": [] + "peerDependencies": { + }, + "optionalDependencies": { + }, + "bundledDependencies": [ + ] } diff --git a/modules/events-mod/src/main/typescript/control.ts b/modules/events-mod/src/main/typescript/control.ts index abf359c..3800be5 100644 --- a/modules/events-mod/src/main/typescript/control.ts +++ b/modules/events-mod/src/main/typescript/control.ts @@ -1,23 +1,11 @@ -import {emitConfigurationUpdate} from "./main/config-update/handleConfigurationUpdate"; -import {emitPrototypes} from "./main/config-update/prototypes"; import {initGlobal} from "./main/global-init"; -import KafkatorioSettings from "./main/settings/KafkatorioSettings"; +import {emitPrototypes} from "./main/events/prototypeUpdates"; require("./main/events/registerHandlers") -require("./main/events/onMapChunkEventListeners") -require("./main/events/onPlayerEventListeners") -require("./main/events/EntityEvents") +require("./main/events/mapChunkUpdates") +require("./main/events/playerUpdates") +require("./main/events/entityUpdates") 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 - initGlobal(true) - // KafkatorioSettings.loadSettings() - emitConfigurationUpdate(data) - emitPrototypes() -}) script.on_init(() => { diff --git a/modules/events-mod/src/main/typescript/generated/kafkatorio-schema/kafkatorio-schema.ts b/modules/events-mod/src/main/typescript/generated/kafkatorio-schema.ts similarity index 96% rename from modules/events-mod/src/main/typescript/generated/kafkatorio-schema/kafkatorio-schema.ts rename to modules/events-mod/src/main/typescript/generated/kafkatorio-schema.ts index ae19634..f0559a9 100644 --- a/modules/events-mod/src/main/typescript/generated/kafkatorio-schema/kafkatorio-schema.ts +++ b/modules/events-mod/src/main/typescript/generated/kafkatorio-schema.ts @@ -13,6 +13,7 @@ export type KafkatorioPacketData = | KafkatorioPacketData.ConsoleChatUpdate | KafkatorioPacketData.ConsoleCommandUpdate | KafkatorioPacketData.EntityUpdate + | KafkatorioPacketData.Error | KafkatorioPacketData.MapChunkUpdate | KafkatorioPacketData.PlayerUpdate | KafkatorioPacketData.PrototypesUpdate @@ -28,6 +29,7 @@ export namespace KafkatorioPacketData { EntityUpdate = "kafkatorio.packet.keyed.EntityUpdate", MapChunkUpdate = "kafkatorio.packet.keyed.MapChunkUpdate", PlayerUpdate = "kafkatorio.packet.keyed.PlayerUpdate", + Error = "kafkatorio.packet.KafkatorioPacketData.Error", } export interface ConfigurationUpdate { @@ -115,6 +117,12 @@ export namespace KafkatorioPacketData { disconnectReason?: string | null; isRemoved?: boolean | null; } + + export interface Error { + type: KafkatorioPacketData.Type.Error; + message?: string | null; + rawValue?: string | null; + } } export type UInt = uint; diff --git a/modules/events-mod/src/main/typescript/main/PacketEmitter.ts b/modules/events-mod/src/main/typescript/main/PacketEmitter.ts index 55a1ba7..a566499 100644 --- a/modules/events-mod/src/main/typescript/main/PacketEmitter.ts +++ b/modules/events-mod/src/main/typescript/main/PacketEmitter.ts @@ -1,9 +1,10 @@ import { KafkatorioPacket, KafkatorioPacketData -} from "../generated/kafkatorio-schema/kafkatorio-schema"; +} from "../generated/kafkatorio-schema"; import {KafkatorioKeyedPacketData} from "./types"; + export class KafkatorioPacketEmitter { emitInstantPacket( diff --git a/modules/events-mod/src/main/typescript/main/cache/cacheChecker.ts b/modules/events-mod/src/main/typescript/main/cache/cacheChecker.ts deleted file mode 100644 index face16a..0000000 --- a/modules/events-mod/src/main/typescript/main/cache/cacheChecker.ts +++ /dev/null @@ -1,10 +0,0 @@ -import EventCacheService from "./EventDataCache"; - - -/** Every 0.1 seconds */ -script.on_nth_tick(6, (nthTick: NthTickEventData) => { - const emittedCount = EventCacheService.extractAndEmitExpiredPackets() - if (emittedCount > 0) { - log(`[on_nth_tick:${nthTick.tick}] emitted ${emittedCount} events`) - } -}) diff --git a/modules/events-mod/src/main/typescript/main/commands/kafkatorioCommands.ts b/modules/events-mod/src/main/typescript/main/commands/kafkatorioCommands.ts index 19a34c5..c9bdcc0 100644 --- a/modules/events-mod/src/main/typescript/main/commands/kafkatorioCommands.ts +++ b/modules/events-mod/src/main/typescript/main/commands/kafkatorioCommands.ts @@ -1,7 +1,6 @@ -import {emitPrototypes} from "../config-update/prototypes"; import {initGlobal} from "../global-init"; -import floor = math.floor; import {Queue} from "../queue/queue"; +import {emitPrototypes} from "../events/prototypeUpdates"; commands.add_command( @@ -32,8 +31,8 @@ commands.add_command( let player = game.players[e.player_index] const chunkPosition: ChunkPosition = { - x: floor(player.position.x / 32), - y: floor(player.position.y / 32), + x: math.floor(player.position.x / 32), + y: math.floor(player.position.y / 32), } const chunkXMin = chunkPosition.x - radius @@ -56,7 +55,7 @@ commands.add_command( position: {x: chunk.x, y: chunk.y}, area: chunk.area, surface: surface, - tick: e.tick + tick: e.tick, } Queue.enqueue( diff --git a/modules/events-mod/src/main/typescript/main/config-update/handleConfigurationUpdate.ts b/modules/events-mod/src/main/typescript/main/events/configurationUpdate.ts similarity index 75% rename from modules/events-mod/src/main/typescript/main/config-update/handleConfigurationUpdate.ts rename to modules/events-mod/src/main/typescript/main/events/configurationUpdate.ts index 4808d6c..b11863f 100644 --- a/modules/events-mod/src/main/typescript/main/config-update/handleConfigurationUpdate.ts +++ b/modules/events-mod/src/main/typescript/main/events/configurationUpdate.ts @@ -3,11 +3,23 @@ import { ConfigurationUpdateGameData, ConfigurationUpdateModData, KafkatorioPacketData -} from "../../generated/kafkatorio-schema/kafkatorio-schema"; +} from "../../generated/kafkatorio-schema"; +import {initGlobal} from "../global-init"; +import {emitPrototypes} from "./prototypeUpdates"; import Type = KafkatorioPacketData.Type; import ConfigurationUpdate = KafkatorioPacketData.ConfigurationUpdate; -export function emitConfigurationUpdate(changeData: ConfigurationChangedData) { + +script.on_configuration_changed((data: ConfigurationChangedData) => { + // runs whenever the version of the base game, or a mod, changes + initGlobal(true) + // KafkatorioSettings.loadSettings() + emitConfigurationUpdate(data) + emitPrototypes() +}) + + +function emitConfigurationUpdate(changeData: ConfigurationChangedData) { const configUpdateData: ConfigurationUpdate = { type: Type.ConfigurationUpdate, @@ -20,6 +32,7 @@ export function emitConfigurationUpdate(changeData: ConfigurationChangedData) { PacketEmitter.emitInstantPacket(configUpdateData) } + function factorioData(changeData: ConfigurationChangedData): ConfigurationUpdateGameData { return { oldVersion: changeData.old_version ?? null, @@ -27,6 +40,7 @@ function factorioData(changeData: ConfigurationChangedData): ConfigurationUpdate } } + function allMods(e: ConfigurationChangedData): ConfigurationUpdateModData[] { let namesOfChangedMods: string[] = Object.keys(e.mod_changes) diff --git a/modules/events-mod/src/main/typescript/main/events/onConsoleEventHandlers.ts b/modules/events-mod/src/main/typescript/main/events/consoleUpdates.ts similarity index 97% rename from modules/events-mod/src/main/typescript/main/events/onConsoleEventHandlers.ts rename to modules/events-mod/src/main/typescript/main/events/consoleUpdates.ts index c76b673..08b2c48 100644 --- a/modules/events-mod/src/main/typescript/main/events/onConsoleEventHandlers.ts +++ b/modules/events-mod/src/main/typescript/main/events/consoleUpdates.ts @@ -1,7 +1,8 @@ import PacketEmitter from "../PacketEmitter"; -import {KafkatorioPacketData} from "../../generated/kafkatorio-schema/kafkatorio-schema"; +import {KafkatorioPacketData} from "../../generated/kafkatorio-schema"; import Type = KafkatorioPacketData.Type; + script.on_event( defines.events.on_console_chat, (event: OnConsoleChatEvent) => { @@ -15,6 +16,7 @@ script.on_event( } ) + script.on_event( defines.events.on_console_command, (event: OnConsoleCommandEvent) => { 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 81da5f1..db6fe3e 100644 --- a/modules/events-mod/src/main/typescript/main/events/converters.ts +++ b/modules/events-mod/src/main/typescript/main/events/converters.ts @@ -1,5 +1,5 @@ import {EventName} from "../types"; -import {Colour, MapChunkPosition} from "../../generated/kafkatorio-schema/kafkatorio-schema"; +import {Colour, MapChunkPosition} from "../../generated/kafkatorio-schema"; export namespace Converters { @@ -57,4 +57,13 @@ export namespace Converters { return [position.x, position.y] } + + export function convertCollisionMaskToNames(cm: CollisionMask): string[] { + let masks: string[] = [] + for (let [name] of pairs(cm)) { + masks.push(name) + } + return masks + } + } diff --git a/modules/events-mod/src/main/typescript/main/events/EntityEvents.ts b/modules/events-mod/src/main/typescript/main/events/entityUpdates.ts similarity index 97% rename from modules/events-mod/src/main/typescript/main/events/EntityEvents.ts rename to modules/events-mod/src/main/typescript/main/events/entityUpdates.ts index 34c2ff3..791f3e6 100644 --- a/modules/events-mod/src/main/typescript/main/events/EntityEvents.ts +++ b/modules/events-mod/src/main/typescript/main/events/entityUpdates.ts @@ -3,7 +3,7 @@ import EventDataCache from "../cache/EventDataCache"; import { EntityUpdateKey, KafkatorioPacketData -} from "../../generated/kafkatorio-schema/kafkatorio-schema"; +} from "../../generated/kafkatorio-schema"; script.on_event(defines.events.on_built_entity, (e: OnBuiltEntityEvent) => { diff --git a/modules/events-mod/src/main/typescript/main/events/onMapChunkEventListeners.ts b/modules/events-mod/src/main/typescript/main/events/mapChunkUpdates.ts similarity index 99% rename from modules/events-mod/src/main/typescript/main/events/onMapChunkEventListeners.ts rename to modules/events-mod/src/main/typescript/main/events/mapChunkUpdates.ts index 858772a..509afc5 100644 --- a/modules/events-mod/src/main/typescript/main/events/onMapChunkEventListeners.ts +++ b/modules/events-mod/src/main/typescript/main/events/mapChunkUpdates.ts @@ -4,7 +4,7 @@ import EventUpdatesManager, {EventUpdates} from "../cache/EventDataCache"; import { KafkatorioPacketData, MapChunkPosition -} from "../../generated/kafkatorio-schema/kafkatorio-schema"; +} from "../../generated/kafkatorio-schema"; import CacheKey = EventUpdates.PacketKey; import Type = KafkatorioPacketData.Type; diff --git a/modules/events-mod/src/main/typescript/main/events/onPlayerEventListeners.ts b/modules/events-mod/src/main/typescript/main/events/playerUpdates.ts similarity index 98% rename from modules/events-mod/src/main/typescript/main/events/onPlayerEventListeners.ts rename to modules/events-mod/src/main/typescript/main/events/playerUpdates.ts index 22ad180..da55741 100644 --- a/modules/events-mod/src/main/typescript/main/events/onPlayerEventListeners.ts +++ b/modules/events-mod/src/main/typescript/main/events/playerUpdates.ts @@ -3,7 +3,7 @@ import EventUpdatesManager from "../cache/EventDataCache"; import { KafkatorioPacketData, PlayerUpdateKey -} from "../../generated/kafkatorio-schema/kafkatorio-schema"; +} from "../../generated/kafkatorio-schema"; import Type = KafkatorioPacketData.Type; import packetEmitter from "../PacketEmitter"; diff --git a/modules/events-mod/src/main/typescript/main/config-update/prototypes.ts b/modules/events-mod/src/main/typescript/main/events/prototypeUpdates.ts similarity index 70% rename from modules/events-mod/src/main/typescript/main/config-update/prototypes.ts rename to modules/events-mod/src/main/typescript/main/events/prototypeUpdates.ts index 85819cd..8c71f9b 100644 --- a/modules/events-mod/src/main/typescript/main/config-update/prototypes.ts +++ b/modules/events-mod/src/main/typescript/main/events/prototypeUpdates.ts @@ -1,24 +1,21 @@ -import {Converters} from "../events/converters"; import PacketEmitter from "../PacketEmitter"; -import { - FactorioPrototype, - KafkatorioPacketData -} from "../../generated/kafkatorio-schema/kafkatorio-schema"; -import Type = KafkatorioPacketData.Type; +import {FactorioPrototype, KafkatorioPacketData} from "../../generated/kafkatorio-schema"; +import {Converters} from "./converters"; import PrototypesUpdate = KafkatorioPacketData.PrototypesUpdate; export function emitPrototypes() { const data: PrototypesUpdate = { - prototypes: prototypes(), - type: Type.PrototypesUpdate, + prototypes: prototypeUpdates(), + type: KafkatorioPacketData.Type.PrototypesUpdate, } PacketEmitter.emitInstantPacket(data) } -function prototypes(): FactorioPrototype[] { + +function prototypeUpdates(): FactorioPrototype[] { let prototypes: FactorioPrototype[] = [] prototypes.push(...getMapTilePrototypes()) @@ -26,6 +23,7 @@ function prototypes(): FactorioPrototype[] { return prototypes } + function getMapTilePrototypes(): FactorioPrototype.MapTile[] { let tiles: FactorioPrototype.MapTile[] = [] for (let [, tile] of game.tile_prototypes) { @@ -35,7 +33,7 @@ function getMapTilePrototypes(): FactorioPrototype.MapTile[] { name: tile.name, order: tile.order, layer: tile.layer, - collisionMasks: convertCollisionMaskToNames(tile.collision_mask), + collisionMasks: Converters.convertCollisionMaskToNames(tile.collision_mask), mapColour: Converters.mapColour(tile.map_color), canBeMined: tile.mineable_properties.minable, }) @@ -60,11 +58,3 @@ function getMapTilePrototypes(): FactorioPrototype.MapTile[] { // } // return tiles // } - -function convertCollisionMaskToNames(cm: CollisionMask): string[] { - let masks: string[] = [] - for (let [name] of pairs(cm)) { - masks.push(name) - } - return masks -} 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 f8b2aa7..d3758c7 100644 --- a/modules/events-mod/src/main/typescript/main/events/registerHandlers.ts +++ b/modules/events-mod/src/main/typescript/main/events/registerHandlers.ts @@ -1,34 +1,11 @@ import {Queue} from "../queue/queue"; import {isEventType} from "./eventTypeCheck"; import {Converters} from "./converters"; -import KafkatorioSettings from "../settings/KafkatorioSettings"; -import {handleChunkGeneratedEvent} from "./onMapChunkEventListeners"; -import {handleSurfaceUpdate} from "./handlers"; +import {handleChunkGeneratedEvent} from "./mapChunkUpdates"; +import {handleSurfaceUpdate} from "./surfaceUpdates"; +import EventCacheService from "../cache/EventDataCache"; -// script.on_event( -// defines.events.on_player_mined_entity, -// (e: OnPlayerMinedEntityEvent) => { -// let eventName = Converters.eventNameString(e.name) -// // handlePlayerUpdate(e.tick, eventName, e.player_index) -// handleEntityUpdate(e.tick, eventName, e.entity) -// } -// ) - -// script.on_event( -// defines.events.on_player_joined_game, -// (e: OnPlayerJoinedGameEvent) => { -// handlePlayerUpdate(e.tick, mapEventIdToName.get(e.name), e.player_index) -// } -// ) - -// script.on_event( -// defines.events.on_player_changed_position, -// (e: OnPlayerChangedPositionEvent) => { -// handlePlayerUpdate(e.tick, mapEventIdToName.get(e.name), e.player_index) -// } -// ) - script.on_event( defines.events.on_tick, (event: OnTickEvent) => { @@ -38,18 +15,26 @@ script.on_event( } } + if (event.tick % 6 == 0) { + // Every 0.1 seconds + const emittedCount = EventCacheService.extractAndEmitExpiredPackets() + if (emittedCount > 0) { + log(`[on_tick:${event.tick}] emitted ${emittedCount} events`) + } + } + if (event.tick % 7 == 0) { const events: EventData[] = Queue.dequeueValues(1) if (events.length > 0) { - log(`[${event.tick}] dequed ${events.length} events, current size: ${Queue.size()}`) + log(`[on_tick:${event.tick}] dequeued ${events.length} events, current size: ${Queue.size()}`) let i = 1 for (const event of events) { if (isEventType(event, defines.events.on_chunk_generated)) { let eName = Converters.eventNameString(event.name) - log(`[${event.tick}] dequed event ${eName}, delay ${i}`) + log(`[on_tick:${event.tick}] dequed event ${eName}, delay ${i}`) handleChunkGeneratedEvent(event, i) i += 1 } @@ -58,12 +43,3 @@ script.on_event( } } ) - - -script.on_event( - defines.events.on_runtime_mod_setting_changed, - (e: OnRuntimeModSettingChangedEvent) => { - print(`Settings changed ${e.setting_type}, ${e.player_index}, ${e.setting}, ${e.mod_name}`) - // KafkatorioSettings.loadSettings() - } -) diff --git a/modules/events-mod/src/main/typescript/main/events/settingsUpdate.ts b/modules/events-mod/src/main/typescript/main/events/settingsUpdate.ts new file mode 100644 index 0000000..93e3593 --- /dev/null +++ b/modules/events-mod/src/main/typescript/main/events/settingsUpdate.ts @@ -0,0 +1,7 @@ +script.on_event( + defines.events.on_runtime_mod_setting_changed, + (e: OnRuntimeModSettingChangedEvent) => { + print(`Settings changed ${e.setting_type}, ${e.player_index}, ${e.setting}, ${e.mod_name}`) + // KafkatorioSettings.loadSettings() + } +) diff --git a/modules/events-mod/src/main/typescript/main/events/handlers.ts b/modules/events-mod/src/main/typescript/main/events/surfaceUpdates.ts similarity index 94% rename from modules/events-mod/src/main/typescript/main/events/handlers.ts rename to modules/events-mod/src/main/typescript/main/events/surfaceUpdates.ts index 62989b8..9c90da5 100644 --- a/modules/events-mod/src/main/typescript/main/events/handlers.ts +++ b/modules/events-mod/src/main/typescript/main/events/surfaceUpdates.ts @@ -1,5 +1,5 @@ import PacketEmitter from "../PacketEmitter"; -import {KafkatorioPacketData} from "../../generated/kafkatorio-schema/kafkatorio-schema"; +import {KafkatorioPacketData} from "../../generated/kafkatorio-schema"; import Type = KafkatorioPacketData.Type; diff --git a/modules/events-mod/src/main/typescript/main/settings/KafkatorioSettings.ts b/modules/events-mod/src/main/typescript/main/settings/KafkatorioSettings.ts index bb90bfb..618554a 100644 --- a/modules/events-mod/src/main/typescript/main/settings/KafkatorioSettings.ts +++ b/modules/events-mod/src/main/typescript/main/settings/KafkatorioSettings.ts @@ -11,35 +11,12 @@ export class KafkatorioSettingsConfig { } - // private eventCacheExpirationTicks: Record = { - // "kafkatorio.packet.keyed.PlayerUpdate": - // KafkatorioSettingsConfig.eventCacheExpirationDefaultSeconds[KafkatorioPacketData.Type.PlayerUpdate], - // "kafkatorio.packet.keyed.MapChunkUpdate": - // KafkatorioSettingsConfig.eventCacheExpirationDefaultSeconds[KafkatorioPacketData.Type.MapChunkUpdate], - // "kafkatorio.packet.keyed.EntityUpdate": - // KafkatorioSettingsConfig.eventCacheExpirationDefaultSeconds[KafkatorioPacketData.Type.EntityUpdate], - // } - public getEventCacheExpirationTicks(packet: KafkatorioKeyedPacketData): uint { const settingName = KafkatorioSettingsConfig.cacheDurationSettingName(packet.type) const seconds: double = settings.global[settingName].value as double return seconds * 60 // convert ticks to seconds } - // private static types: KafkatorioKeyedPacketTypes[] = [ - // KafkatorioPacketData.Type.PlayerUpdate, - // KafkatorioPacketData.Type.MapChunkUpdate, - // KafkatorioPacketData.Type.EntityUpdate, - // ] - - // public loadSettings(): void { - // for (const type of KafkatorioSettingsConfig.types) { - // const settingName = KafkatorioSettingsConfig.cacheDurationSettingName(type) - // const seconds: double = settings.global[settingName].value as double - // this.eventCacheExpirationTicks[type] = seconds * 60 // convert ticks to seconds - // } - // } - public initialiseSettings(data: Data): void { for (const [type,] of pairs(KafkatorioSettingsConfig.eventCacheExpirationDefaultSeconds)) { diff --git a/modules/events-mod/src/main/typescript/main/types.d.ts b/modules/events-mod/src/main/typescript/main/types.d.ts index 7505b54..fcdc914 100644 --- a/modules/events-mod/src/main/typescript/main/types.d.ts +++ b/modules/events-mod/src/main/typescript/main/types.d.ts @@ -1,4 +1,4 @@ -import {KafkatorioPacketData} from "../generated/kafkatorio-schema/kafkatorio-schema"; +import {KafkatorioPacketData} from "../generated/kafkatorio-schema"; export type EventName = keyof typeof defines.events diff --git a/modules/infra-kafka-pipe/src/docker-compose.yml b/modules/infra-kafka-pipe/src/docker-compose.yml index 4536152..dd90da2 100644 --- a/modules/infra-kafka-pipe/src/docker-compose.yml +++ b/modules/infra-kafka-pipe/src/docker-compose.yml @@ -20,10 +20,10 @@ services: KAFKA_HOST: "kafka:29092" volumes: # Windows (requires privileged/root) -# - "//var/run/docker.sock:/var/run/docker.sock" - + - "//var/run/docker.sock:/var/run/docker.sock" + # Rootless: - - "/run/user/1000/docker.sock:/var/run/docker.sock" +# - "/run/user/1000/docker.sock:/var/run/docker.sock" # Unix? # - "/var/run/docker.sock:/var/run/docker.sock"