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 dfa38d7..08b7e17 100644 --- a/modules/events-mod/src/main/typescript/main/cache/EventDataCache.ts +++ b/modules/events-mod/src/main/typescript/main/cache/EventDataCache.ts @@ -2,7 +2,8 @@ export namespace EventDataCache { declare const global: { - cache: LuaTable, CacheEntry>, + cache: LuaTable>, + // cache: Map>, defaultCacheDurationTicks: Record, } @@ -16,7 +17,8 @@ export namespace EventDataCache { if (force == true || isAnythingUndefined) { log("Initialising global.cache") - global.cache = new LuaTable, CacheEntry>() + // global.cache = new Map, CacheEntry>() + global.cache = new LuaTable>() log("Initialising global.DEFAULT_CACHE_DURATION_TICKS") global.defaultCacheDurationTicks = { @@ -83,13 +85,19 @@ export namespace EventDataCache { export function extractExpired(): Array { + let countExpired = 0 + let countTotal = 0 const expiredData: Array = [] for (let [key, entry] of global.cache) { + countTotal++ if (isExpired(entry)) { + countExpired++ expiredData.push(entry.data) global.cache.delete(key) + } } + log(`cache expired items count: ${countExpired}, total: ${countTotal}`) return expiredData } @@ -97,10 +105,12 @@ export namespace EventDataCache { function getCacheEntry( key: CacheKey ): CacheEntry | undefined { - if (!global.cache.has(key)) { + const hash = game.encode_string(game.table_to_json(key))!! + // const value: CacheEntry | undefined = global.cache.get(hash) + if (!global.cache.has(hash)) { return undefined } - const value: CacheEntry = global.cache.get(key) + const value: CacheEntry = global.cache.get(hash) if (isEntryInstanceOf(value, key.updateType)) { return value } else { @@ -114,10 +124,11 @@ export namespace EventDataCache { key: CacheKey, mutate: CacheDataMutator, ): CacheEntry { - const data: CacheData = >{updateType: key.updateType} + const data: CacheData = >{...key} mutate(data) let entry: CacheEntry = new CacheEntry(data) - global.cache.set(key, entry) + const hash = game.encode_string(game.table_to_json(key))!! + global.cache.set(hash, entry) return entry } @@ -151,7 +162,6 @@ export namespace EventDataCache { export type CacheData = CacheTyped & Omit, "updateType"> - // & NullablePartial, "updateType">> export type CacheTyped = { @@ -187,18 +197,26 @@ export namespace EventDataCache { function isEntryInstanceOf( - data: CacheEntry, + entry: CacheEntry | undefined, updateType: TYPE, - ): data is CacheEntry { - return isDataInstanceOf(data.data, updateType) + ): entry is CacheEntry { + return isDataInstanceOf(entry?.data, updateType) } function isDataInstanceOf( - data: CacheData, + data: CacheData | undefined, updateType: TYPE, ): data is CacheData { - return data.updateType == updateType + return data != undefined && data.updateType == updateType + } + + + function isKeyInstanceOf( + key: CacheKey | undefined, + updateType: TYPE, + ): key is CacheKey { + return key != undefined && key.updateType == updateType } } diff --git a/modules/events-mod/src/main/typescript/main/events/onPlayerEventListeners.ts b/modules/events-mod/src/main/typescript/main/events/onPlayerEventListeners.ts index ca9f813..1463b9e 100644 --- a/modules/events-mod/src/main/typescript/main/events/onPlayerEventListeners.ts +++ b/modules/events-mod/src/main/typescript/main/events/onPlayerEventListeners.ts @@ -20,9 +20,7 @@ function playerUpdateThrottle( if (data.events == null) { data.events = [] } - if (eventName ! in data.events) { - data.events.push(eventName) - } + data.events.push(eventName) }) ) } diff --git a/modules/events-mod/src/main/typescript/package-lock.json b/modules/events-mod/src/main/typescript/package-lock.json index c8fc916..44d891d 100644 --- a/modules/events-mod/src/main/typescript/package-lock.json +++ b/modules/events-mod/src/main/typescript/package-lock.json @@ -4,11 +4,6 @@ "lockfileVersion": 1, "requires": true, "dependencies": { - "@types/node": { - "version": "12.20.33", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.33.tgz", - "integrity": "sha512-5XmYX2GECSa+CxMYaFsr2mrql71Q4EvHjKS+ox/SiwSdaASMoBIWE6UmZqFO+VX1jIcsYLStI4FFoB6V7FeIYw==" - }, "enhanced-resolve": { "version": "5.8.3", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.8.3.tgz", diff --git a/modules/events-mod/src/main/typescript/package.json b/modules/events-mod/src/main/typescript/package.json index 90084ae..5190f46 100644 --- a/modules/events-mod/src/main/typescript/package.json +++ b/modules/events-mod/src/main/typescript/package.json @@ -13,11 +13,11 @@ }, "dependencies": { "lua-types": "^2.11.0", - "@types/node": "^12.0.8", "typescript-to-lua": "1.3.3", "typed-factorio": "0.18.1", "typescript": "4.5.5" }, + "// @types/node": "^12.0.8", "license": "UNLICENSED", "peerDependencies": { }, diff --git a/modules/events-server/src/main/kotlin/dev/adamko/kafkatorio/processor/topology/factorioServerPackets.kt b/modules/events-server/src/main/kotlin/dev/adamko/kafkatorio/processor/topology/factorioServerPackets.kt index 7c1d8ef..0d8c58b 100644 --- a/modules/events-server/src/main/kotlin/dev/adamko/kafkatorio/processor/topology/factorioServerPackets.kt +++ b/modules/events-server/src/main/kotlin/dev/adamko/kafkatorio/processor/topology/factorioServerPackets.kt @@ -58,7 +58,7 @@ fun splitFactorioServerPacketStream( is FactorioEvent -> value.data.objectName.name is FactorioConfigurationUpdate -> "FactorioConfigurationUpdate" is FactorioPrototypes -> "all" - is FactorioEventUpdatePacket -> "all" + is FactorioEventUpdatePacket -> value.update.updateType.name } "$base.$type"