refactor typescript files (mostly moving&renaming for consistency)

This commit is contained in:
Adam 2022-06-27 22:57:57 +02:00
parent 5f1187f9a8
commit 1d0b2b8eaa
19 changed files with 91 additions and 126 deletions

View file

@ -9,7 +9,8 @@
"engines": { "engines": {
"node": "~14.19.1" "node": "~14.19.1"
}, },
"devDependencies": {}, "devDependencies": {
},
"dependencies": { "dependencies": {
"lua-types": "^2.11.0", "lua-types": "^2.11.0",
"typescript-to-lua": "1.6.0", "typescript-to-lua": "1.6.0",
@ -17,7 +18,10 @@
"typescript": "4.7.4" "typescript": "4.7.4"
}, },
"license": "UNLICENSED", "license": "UNLICENSED",
"peerDependencies": {}, "peerDependencies": {
"optionalDependencies": {}, },
"bundledDependencies": [] "optionalDependencies": {
},
"bundledDependencies": [
]
} }

View file

@ -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 {initGlobal} from "./main/global-init";
import KafkatorioSettings from "./main/settings/KafkatorioSettings"; import {emitPrototypes} from "./main/events/prototypeUpdates";
require("./main/events/registerHandlers") require("./main/events/registerHandlers")
require("./main/events/onMapChunkEventListeners") require("./main/events/mapChunkUpdates")
require("./main/events/onPlayerEventListeners") require("./main/events/playerUpdates")
require("./main/events/EntityEvents") require("./main/events/entityUpdates")
require("./main/commands/kafkatorioCommands") 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(() => { script.on_init(() => {

View file

@ -13,6 +13,7 @@ export type KafkatorioPacketData =
| KafkatorioPacketData.ConsoleChatUpdate | KafkatorioPacketData.ConsoleChatUpdate
| KafkatorioPacketData.ConsoleCommandUpdate | KafkatorioPacketData.ConsoleCommandUpdate
| KafkatorioPacketData.EntityUpdate | KafkatorioPacketData.EntityUpdate
| KafkatorioPacketData.Error
| KafkatorioPacketData.MapChunkUpdate | KafkatorioPacketData.MapChunkUpdate
| KafkatorioPacketData.PlayerUpdate | KafkatorioPacketData.PlayerUpdate
| KafkatorioPacketData.PrototypesUpdate | KafkatorioPacketData.PrototypesUpdate
@ -28,6 +29,7 @@ export namespace KafkatorioPacketData {
EntityUpdate = "kafkatorio.packet.keyed.EntityUpdate", EntityUpdate = "kafkatorio.packet.keyed.EntityUpdate",
MapChunkUpdate = "kafkatorio.packet.keyed.MapChunkUpdate", MapChunkUpdate = "kafkatorio.packet.keyed.MapChunkUpdate",
PlayerUpdate = "kafkatorio.packet.keyed.PlayerUpdate", PlayerUpdate = "kafkatorio.packet.keyed.PlayerUpdate",
Error = "kafkatorio.packet.KafkatorioPacketData.Error",
} }
export interface ConfigurationUpdate { export interface ConfigurationUpdate {
@ -115,6 +117,12 @@ export namespace KafkatorioPacketData {
disconnectReason?: string | null; disconnectReason?: string | null;
isRemoved?: boolean | null; isRemoved?: boolean | null;
} }
export interface Error {
type: KafkatorioPacketData.Type.Error;
message?: string | null;
rawValue?: string | null;
}
} }
export type UInt = uint; export type UInt = uint;

View file

@ -1,9 +1,10 @@
import { import {
KafkatorioPacket, KafkatorioPacket,
KafkatorioPacketData KafkatorioPacketData
} from "../generated/kafkatorio-schema/kafkatorio-schema"; } from "../generated/kafkatorio-schema";
import {KafkatorioKeyedPacketData} from "./types"; import {KafkatorioKeyedPacketData} from "./types";
export class KafkatorioPacketEmitter { export class KafkatorioPacketEmitter {
emitInstantPacket<DATA extends KafkatorioPacketData>( emitInstantPacket<DATA extends KafkatorioPacketData>(

View file

@ -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`)
}
})

View file

@ -1,7 +1,6 @@
import {emitPrototypes} from "../config-update/prototypes";
import {initGlobal} from "../global-init"; import {initGlobal} from "../global-init";
import floor = math.floor;
import {Queue} from "../queue/queue"; import {Queue} from "../queue/queue";
import {emitPrototypes} from "../events/prototypeUpdates";
commands.add_command( commands.add_command(
@ -32,8 +31,8 @@ commands.add_command(
let player = game.players[e.player_index] let player = game.players[e.player_index]
const chunkPosition: ChunkPosition = { const chunkPosition: ChunkPosition = {
x: floor(player.position.x / 32), x: math.floor(player.position.x / 32),
y: floor(player.position.y / 32), y: math.floor(player.position.y / 32),
} }
const chunkXMin = chunkPosition.x - radius const chunkXMin = chunkPosition.x - radius
@ -56,7 +55,7 @@ commands.add_command(
position: {x: chunk.x, y: chunk.y}, position: {x: chunk.x, y: chunk.y},
area: chunk.area, area: chunk.area,
surface: surface, surface: surface,
tick: e.tick tick: e.tick,
} }
Queue.enqueue( Queue.enqueue(

View file

@ -3,11 +3,23 @@ import {
ConfigurationUpdateGameData, ConfigurationUpdateGameData,
ConfigurationUpdateModData, ConfigurationUpdateModData,
KafkatorioPacketData 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 Type = KafkatorioPacketData.Type;
import ConfigurationUpdate = KafkatorioPacketData.ConfigurationUpdate; 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 = { const configUpdateData: ConfigurationUpdate = {
type: Type.ConfigurationUpdate, type: Type.ConfigurationUpdate,
@ -20,6 +32,7 @@ export function emitConfigurationUpdate(changeData: ConfigurationChangedData) {
PacketEmitter.emitInstantPacket(configUpdateData) PacketEmitter.emitInstantPacket(configUpdateData)
} }
function factorioData(changeData: ConfigurationChangedData): ConfigurationUpdateGameData { function factorioData(changeData: ConfigurationChangedData): ConfigurationUpdateGameData {
return { return {
oldVersion: changeData.old_version ?? null, oldVersion: changeData.old_version ?? null,
@ -27,6 +40,7 @@ function factorioData(changeData: ConfigurationChangedData): ConfigurationUpdate
} }
} }
function allMods(e: ConfigurationChangedData): ConfigurationUpdateModData[] { function allMods(e: ConfigurationChangedData): ConfigurationUpdateModData[] {
let namesOfChangedMods: string[] = Object.keys(e.mod_changes) let namesOfChangedMods: string[] = Object.keys(e.mod_changes)

View file

@ -1,7 +1,8 @@
import PacketEmitter from "../PacketEmitter"; import PacketEmitter from "../PacketEmitter";
import {KafkatorioPacketData} from "../../generated/kafkatorio-schema/kafkatorio-schema"; import {KafkatorioPacketData} from "../../generated/kafkatorio-schema";
import Type = KafkatorioPacketData.Type; import Type = KafkatorioPacketData.Type;
script.on_event( script.on_event(
defines.events.on_console_chat, defines.events.on_console_chat,
(event: OnConsoleChatEvent) => { (event: OnConsoleChatEvent) => {
@ -15,6 +16,7 @@ script.on_event(
} }
) )
script.on_event( script.on_event(
defines.events.on_console_command, defines.events.on_console_command,
(event: OnConsoleCommandEvent) => { (event: OnConsoleCommandEvent) => {

View file

@ -1,5 +1,5 @@
import {EventName} from "../types"; import {EventName} from "../types";
import {Colour, MapChunkPosition} from "../../generated/kafkatorio-schema/kafkatorio-schema"; import {Colour, MapChunkPosition} from "../../generated/kafkatorio-schema";
export namespace Converters { export namespace Converters {
@ -57,4 +57,13 @@ export namespace Converters {
return [position.x, position.y] 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
}
} }

View file

@ -3,7 +3,7 @@ import EventDataCache from "../cache/EventDataCache";
import { import {
EntityUpdateKey, EntityUpdateKey,
KafkatorioPacketData KafkatorioPacketData
} from "../../generated/kafkatorio-schema/kafkatorio-schema"; } from "../../generated/kafkatorio-schema";
script.on_event(defines.events.on_built_entity, (e: OnBuiltEntityEvent) => { script.on_event(defines.events.on_built_entity, (e: OnBuiltEntityEvent) => {

View file

@ -4,7 +4,7 @@ import EventUpdatesManager, {EventUpdates} from "../cache/EventDataCache";
import { import {
KafkatorioPacketData, KafkatorioPacketData,
MapChunkPosition MapChunkPosition
} from "../../generated/kafkatorio-schema/kafkatorio-schema"; } from "../../generated/kafkatorio-schema";
import CacheKey = EventUpdates.PacketKey; import CacheKey = EventUpdates.PacketKey;
import Type = KafkatorioPacketData.Type; import Type = KafkatorioPacketData.Type;

View file

@ -3,7 +3,7 @@ import EventUpdatesManager from "../cache/EventDataCache";
import { import {
KafkatorioPacketData, KafkatorioPacketData,
PlayerUpdateKey PlayerUpdateKey
} from "../../generated/kafkatorio-schema/kafkatorio-schema"; } from "../../generated/kafkatorio-schema";
import Type = KafkatorioPacketData.Type; import Type = KafkatorioPacketData.Type;
import packetEmitter from "../PacketEmitter"; import packetEmitter from "../PacketEmitter";

View file

@ -1,24 +1,21 @@
import {Converters} from "../events/converters";
import PacketEmitter from "../PacketEmitter"; import PacketEmitter from "../PacketEmitter";
import { import {FactorioPrototype, KafkatorioPacketData} from "../../generated/kafkatorio-schema";
FactorioPrototype, import {Converters} from "./converters";
KafkatorioPacketData
} from "../../generated/kafkatorio-schema/kafkatorio-schema";
import Type = KafkatorioPacketData.Type;
import PrototypesUpdate = KafkatorioPacketData.PrototypesUpdate; import PrototypesUpdate = KafkatorioPacketData.PrototypesUpdate;
export function emitPrototypes() { export function emitPrototypes() {
const data: PrototypesUpdate = { const data: PrototypesUpdate = {
prototypes: prototypes(), prototypes: prototypeUpdates(),
type: Type.PrototypesUpdate, type: KafkatorioPacketData.Type.PrototypesUpdate,
} }
PacketEmitter.emitInstantPacket(data) PacketEmitter.emitInstantPacket(data)
} }
function prototypes(): FactorioPrototype[] {
function prototypeUpdates(): FactorioPrototype[] {
let prototypes: FactorioPrototype[] = [] let prototypes: FactorioPrototype[] = []
prototypes.push(...getMapTilePrototypes()) prototypes.push(...getMapTilePrototypes())
@ -26,6 +23,7 @@ function prototypes(): FactorioPrototype[] {
return prototypes return prototypes
} }
function getMapTilePrototypes(): FactorioPrototype.MapTile[] { function getMapTilePrototypes(): FactorioPrototype.MapTile[] {
let tiles: FactorioPrototype.MapTile[] = [] let tiles: FactorioPrototype.MapTile[] = []
for (let [, tile] of game.tile_prototypes) { for (let [, tile] of game.tile_prototypes) {
@ -35,7 +33,7 @@ function getMapTilePrototypes(): FactorioPrototype.MapTile[] {
name: tile.name, name: tile.name,
order: tile.order, order: tile.order,
layer: tile.layer, layer: tile.layer,
collisionMasks: convertCollisionMaskToNames(tile.collision_mask), collisionMasks: Converters.convertCollisionMaskToNames(tile.collision_mask),
mapColour: Converters.mapColour(tile.map_color), mapColour: Converters.mapColour(tile.map_color),
canBeMined: tile.mineable_properties.minable, canBeMined: tile.mineable_properties.minable,
}) })
@ -60,11 +58,3 @@ function getMapTilePrototypes(): FactorioPrototype.MapTile[] {
// } // }
// return tiles // return tiles
// } // }
function convertCollisionMaskToNames(cm: CollisionMask): string[] {
let masks: string[] = []
for (let [name] of pairs(cm)) {
masks.push(name)
}
return masks
}

View file

@ -1,34 +1,11 @@
import {Queue} from "../queue/queue"; import {Queue} from "../queue/queue";
import {isEventType} from "./eventTypeCheck"; import {isEventType} from "./eventTypeCheck";
import {Converters} from "./converters"; import {Converters} from "./converters";
import KafkatorioSettings from "../settings/KafkatorioSettings"; import {handleChunkGeneratedEvent} from "./mapChunkUpdates";
import {handleChunkGeneratedEvent} from "./onMapChunkEventListeners"; import {handleSurfaceUpdate} from "./surfaceUpdates";
import {handleSurfaceUpdate} from "./handlers"; 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( script.on_event(
defines.events.on_tick, defines.events.on_tick,
(event: OnTickEvent) => { (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) { if (event.tick % 7 == 0) {
const events: EventData[] = Queue.dequeueValues(1) const events: EventData[] = Queue.dequeueValues(1)
if (events.length > 0) { 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 let i = 1
for (const event of events) { for (const event of events) {
if (isEventType(event, defines.events.on_chunk_generated)) { if (isEventType(event, defines.events.on_chunk_generated)) {
let eName = Converters.eventNameString(event.name) 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) handleChunkGeneratedEvent(event, i)
i += 1 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()
}
)

View file

@ -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()
}
)

View file

@ -1,5 +1,5 @@
import PacketEmitter from "../PacketEmitter"; import PacketEmitter from "../PacketEmitter";
import {KafkatorioPacketData} from "../../generated/kafkatorio-schema/kafkatorio-schema"; import {KafkatorioPacketData} from "../../generated/kafkatorio-schema";
import Type = KafkatorioPacketData.Type; import Type = KafkatorioPacketData.Type;

View file

@ -11,35 +11,12 @@ export class KafkatorioSettingsConfig {
} }
// private eventCacheExpirationTicks: Record<KafkatorioKeyedPacketTypes, double> = {
// "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 { public getEventCacheExpirationTicks(packet: KafkatorioKeyedPacketData): uint {
const settingName = KafkatorioSettingsConfig.cacheDurationSettingName(packet.type) const settingName = KafkatorioSettingsConfig.cacheDurationSettingName(packet.type)
const seconds: double = settings.global[settingName].value as double const seconds: double = settings.global[settingName].value as double
return seconds * 60 // convert ticks to seconds 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 { public initialiseSettings(data: Data): void {
for (const [type,] of pairs(KafkatorioSettingsConfig.eventCacheExpirationDefaultSeconds)) { for (const [type,] of pairs(KafkatorioSettingsConfig.eventCacheExpirationDefaultSeconds)) {

View file

@ -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 export type EventName = keyof typeof defines.events

View file

@ -20,10 +20,10 @@ services:
KAFKA_HOST: "kafka:29092" KAFKA_HOST: "kafka:29092"
volumes: volumes:
# Windows (requires privileged/root) # Windows (requires privileged/root)
# - "//var/run/docker.sock:/var/run/docker.sock" - "//var/run/docker.sock:/var/run/docker.sock"
# Rootless: # Rootless:
- "/run/user/1000/docker.sock:/var/run/docker.sock" # - "/run/user/1000/docker.sock:/var/run/docker.sock"
# Unix? # Unix?
# - "/var/run/docker.sock:/var/run/docker.sock" # - "/var/run/docker.sock:/var/run/docker.sock"