more re-organisation to new name

This commit is contained in:
Adam 2021-12-01 18:12:34 +01:00
parent 633e898f3c
commit 8c75b47a96
37 changed files with 219 additions and 197 deletions

View file

@ -1,19 +0,0 @@
package dev.adamko.factoriowebmap.archetype
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMultiplatformPlugin
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsPlugin
plugins {
id("com.github.node-gradle.node")
id("dev.adamko.factoriowebmap.archetype.base")
}
node {
download.set(true)
version.set("14.18.0")
distBaseUrl.set(null as String?) // set by dependencyResolutionManagement
}
project.plugins.withType<KotlinJsPlugin>()
project.plugins.withType<KotlinMultiplatformPlugin>()

View file

@ -1,20 +0,0 @@
package dev.adamko.factoriowebmap.configurations
import org.gradle.api.artifacts.Configuration
import org.gradle.api.attributes.AttributeContainer
import org.gradle.api.attributes.Bundling
import org.gradle.api.attributes.Category
import org.gradle.api.attributes.LibraryElements
import org.gradle.api.attributes.Usage
import org.gradle.api.model.ObjectFactory
import org.gradle.kotlin.dsl.named
fun Configuration.factorioModAttributes(objects: ObjectFactory) =
attributes { factorioMod(objects) }
fun AttributeContainer.factorioMod(objects: ObjectFactory) {
attribute(Usage.USAGE_ATTRIBUTE, objects.named("factorio"))
attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.LIBRARY))
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements.CLASSES_AND_RESOURCES))
attribute(Bundling.BUNDLING_ATTRIBUTE, objects.named(Bundling.EMBEDDED))
}

View file

@ -1,15 +0,0 @@
package dev.adamko.factoriowebmap.configurations
import org.gradle.api.artifacts.Configuration
fun Configuration.asProvider() {
isVisible = false
isCanBeResolved = false
isCanBeConsumed = true
}
fun Configuration.asConsumer() {
isVisible = false
isCanBeResolved = true
isCanBeConsumed = false
}

View file

@ -1,20 +0,0 @@
package dev.adamko.factoriowebmap.configurations
import org.gradle.api.artifacts.Configuration
import org.gradle.api.attributes.AttributeContainer
import org.gradle.api.attributes.Bundling
import org.gradle.api.attributes.Category
import org.gradle.api.attributes.LibraryElements
import org.gradle.api.attributes.Usage
import org.gradle.api.model.ObjectFactory
import org.gradle.kotlin.dsl.named
fun Configuration.typescriptAttributes(objects: ObjectFactory) =
attributes { typescript(objects) }
fun AttributeContainer.typescript(objects: ObjectFactory) {
attribute(Usage.USAGE_ATTRIBUTE, objects.named("typescript"))
attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.LIBRARY))
attribute(LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements.OBJECTS))
attribute(Bundling.BUNDLING_ATTRIBUTE, objects.named(Bundling.EXTERNAL))
}

View file

@ -1,4 +1,8 @@
package dev.adamko.factoriowebmap.archetype
package dev.adamko.kafkatorio
import org.gradle.kotlin.dsl.base
import org.gradle.kotlin.dsl.extra
import org.gradle.kotlin.dsl.idea
plugins {
idea

View file

@ -0,0 +1,41 @@
package dev.adamko.kafkatorio.gradle
import org.gradle.api.artifacts.Configuration
import org.gradle.api.attributes.Bundling
import org.gradle.api.attributes.Bundling.BUNDLING_ATTRIBUTE
import org.gradle.api.attributes.Category
import org.gradle.api.attributes.Category.CATEGORY_ATTRIBUTE
import org.gradle.api.attributes.LibraryElements
import org.gradle.api.attributes.LibraryElements.LIBRARY_ELEMENTS_ATTRIBUTE
import org.gradle.api.attributes.Usage.USAGE_ATTRIBUTE
import org.gradle.api.model.ObjectFactory
import org.gradle.kotlin.dsl.named
fun Configuration.asProvider() {
isVisible = false
isCanBeResolved = false
isCanBeConsumed = true
}
fun Configuration.asConsumer() {
isVisible = false
isCanBeResolved = true
isCanBeConsumed = false
}
fun Configuration.factorioModAttributes(objects: ObjectFactory): Configuration =
attributes {
attribute(USAGE_ATTRIBUTE, objects.named("factorio"))
attribute(CATEGORY_ATTRIBUTE, objects.named(Category.LIBRARY))
attribute(LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements.CLASSES_AND_RESOURCES))
attribute(BUNDLING_ATTRIBUTE, objects.named(Bundling.EMBEDDED))
}
fun Configuration.typescriptAttributes(objects: ObjectFactory) =
attributes {
attribute(USAGE_ATTRIBUTE, objects.named("typescript"))
attribute(CATEGORY_ATTRIBUTE, objects.named(Category.LIBRARY))
attribute(LIBRARY_ELEMENTS_ATTRIBUTE, objects.named(LibraryElements.OBJECTS))
attribute(BUNDLING_ATTRIBUTE, objects.named(Bundling.EXTERNAL))
}

View file

@ -1,8 +1,11 @@
package dev.adamko.factoriowebmap.archetype
package dev.adamko.kafkatorio.lang
import org.gradle.kotlin.dsl.kotlin
import com.github.gradle.node.npm.task.NpmTask
import com.github.gradle.node.task.NodeTask
import org.gradle.kotlin.dsl.dependencies
import org.gradle.kotlin.dsl.extra
import org.gradle.kotlin.dsl.getting
import org.jetbrains.kotlin.gradle.targets.js.dukat.DtsResolver
import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.RootPackageJsonTask
import org.jetbrains.kotlin.gradle.targets.js.npm.tasks.KotlinPackageJsonTask
@ -12,8 +15,8 @@ import org.jetbrains.kotlin.gradle.targets.js.npm.NpmProject
plugins {
kotlin("js")
id("dev.adamko.factoriowebmap.archetype.base")
id("dev.adamko.factoriowebmap.archetype.node")
id("dev.adamko.kafkatorio.base")
id("dev.adamko.kafkatorio.lang.node")
}
kotlin {

View file

@ -1,9 +1,12 @@
package dev.adamko.factoriowebmap.archetype
package dev.adamko.kafkatorio.lang
import org.gradle.kotlin.dsl.dependencies
import org.gradle.kotlin.dsl.kotlin
import org.gradle.kotlin.dsl.withType
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
plugins {
id("dev.adamko.factoriowebmap.archetype.base")
id("dev.adamko.kafkatorio.base")
kotlin("jvm")
}

View file

@ -1,11 +1,13 @@
package dev.adamko.factoriowebmap.archetype
package dev.adamko.kafkatorio.lang
import org.gradle.kotlin.dsl.configure
import org.gradle.kotlin.dsl.kotlin
import org.jetbrains.kotlin.gradle.targets.js.nodejs.NodeJsRootExtension
plugins {
id("dev.adamko.factoriowebmap.archetype.base")
id("dev.adamko.factoriowebmap.archetype.node")
id("dev.adamko.kafkatorio.base")
id("dev.adamko.kafkatorio.lang.node")
kotlin("multiplatform")
}

View file

@ -0,0 +1,87 @@
package dev.adamko.kafkatorio.lang
import com.github.gradle.node.NodePlugin
import dev.adamko.kafkatorio.task.UpdatePackageJson
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonObject
import kotlinx.serialization.json.JsonPrimitive
import kotlinx.serialization.json.jsonObject
import kotlinx.serialization.json.jsonPrimitive
import org.gradle.kotlin.dsl.registering
import org.gradle.kotlin.dsl.support.useToRun
import org.gradle.kotlin.dsl.withType
import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinMultiplatformPlugin
import org.jetbrains.kotlin.gradle.targets.js.KotlinJsPlugin
import org.jetbrains.kotlin.util.suffixIfNot
plugins {
id("com.github.node-gradle.node")
id("dev.adamko.kafkatorio.base")
}
node {
download.set(true)
version.set("14.18.0")
distBaseUrl.set(null as String?) // set by dependencyResolutionManagement
}
project.plugins.withType<KotlinJsPlugin>()
project.plugins.withType<KotlinMultiplatformPlugin>()
val jsonMapper = Json {
prettyPrint = true
prettyPrintIndent = " "
}
val packageJsonFile: RegularFile = layout.projectDirectory.file("src/main/typescript/package.json")
fun arePropertiesUpToDate(properties: () -> Map<String, String>): Spec<Task> =
Spec<Task> {
val packageJsonContent = packageJsonFile.asFile.readText()
val packageJson = jsonMapper.parseToJsonElement(packageJsonContent).jsonObject
properties().all { (key, expectedVal) ->
val actualVal = packageJson[key]?.jsonPrimitive?.content
val isUpToDate = expectedVal == actualVal
if (!isUpToDate) {
logger.lifecycle("package.json has outdated property $key=$actualVal (expected: $expectedVal)")
}
isUpToDate
}
}
val updatePackageJson by tasks.registering(UpdatePackageJson::class) {
group = NodePlugin.NODE_GROUP
group = project.name
description = "Read the package.json file and update the version and name, based on the project."
propertiesToCheck["version"] = "${project.version}"
outputs.file(packageJsonFile)
// check to see if the properties are already up-to-date
onlyIf(arePropertiesUpToDate { propertiesToCheck })
doLast {
val packageJsonContent = packageJsonFile.asFile.readText()
val packageJson = jsonMapper.parseToJsonElement(packageJsonContent).jsonObject
val newJsonProps = propertiesToCheck.mapValues { (_, newVal) -> JsonPrimitive(newVal) }
val packageJsonUpdate = JsonObject(packageJson + newJsonProps)
val packageJsonContentUpdated =
jsonMapper
.encodeToString(packageJsonUpdate)
.suffixIfNot("\n")
packageJsonFile.asFile.writer().useToRun {
write(packageJsonContentUpdated)
}
}
}

View file

@ -1,7 +1,10 @@
package dev.adamko.factoriowebmap.archetype
package dev.adamko.kafkatorio
import org.gradle.kotlin.dsl.extra
import org.gradle.kotlin.dsl.registering
plugins {
id("dev.adamko.factoriowebmap.archetype.base")
id("dev.adamko.kafkatorio.base")
}
val processRunnerTaskGroup: String by extra("processes")

View file

@ -0,0 +1,9 @@
package dev.adamko.kafkatorio.task
import org.gradle.api.DefaultTask
import org.gradle.api.tasks.Input
abstract class UpdatePackageJson : DefaultTask() {
@get:Input
val propertiesToCheck: MutableMap<String, String> = mutableMapOf()
}

View file

@ -1,23 +1,15 @@
import com.github.gradle.node.npm.task.NpmTask
import dev.adamko.factoriowebmap.configurations.asConsumer
import dev.adamko.factoriowebmap.configurations.asProvider
import dev.adamko.factoriowebmap.configurations.factorioModAttributes
import dev.adamko.factoriowebmap.configurations.typescriptAttributes
import dev.adamko.kafkatorio.gradle.asConsumer
import dev.adamko.kafkatorio.gradle.asProvider
import dev.adamko.kafkatorio.gradle.factorioModAttributes
import dev.adamko.kafkatorio.gradle.typescriptAttributes
import groovy.json.JsonOutput
import kotlinx.serialization.encodeToString
import kotlinx.serialization.json.Json
import kotlinx.serialization.json.JsonObject
import kotlinx.serialization.json.JsonPrimitive
import kotlinx.serialization.json.jsonObject
import kotlinx.serialization.json.jsonPrimitive
import org.apache.tools.ant.filters.ReplaceTokens
import org.gradle.kotlin.dsl.support.useToRun
import org.jetbrains.kotlin.util.parseSpaceSeparatedArgs
import org.jetbrains.kotlin.util.suffixIfNot
plugins {
idea
id("dev.adamko.factoriowebmap.archetype.node")
id("dev.adamko.kafkatorio.lang.node")
}
val tokens: Map<String, String> by project.extra
@ -29,8 +21,7 @@ node {
nodeProjectDir.set(tsSrcDir)
}
val dataModelTs by configurations.registering {
val typescriptEventsSchema by configurations.registering {
asConsumer()
typescriptAttributes(objects)
defaultDependencies {
@ -38,7 +29,6 @@ val dataModelTs by configurations.registering {
}
}
val typescriptToLua by tasks.registering(NpmTask::class) {
description = "Convert Typescript To Lua"
group = project.name
@ -75,56 +65,14 @@ val typescriptToLua by tasks.registering(NpmTask::class) {
}
val updatePackageJsonVersion by tasks.registering {
group = project.name
description = """
Read the package.json file and set the version to be the project's version.
""".trimIndent()
val projectVersion = "${project.version}"
inputs.properties(
"projectVersion" to projectVersion,
)
val packageJsonFile = layout.projectDirectory.file("src/main/typescript/package.json")
outputs.file(packageJsonFile)
val jsonFormatter = Json {
prettyPrint = true
prettyPrintIndent = " "
}
onlyIf {
// check to see if the version is already up-to-date
val packageJsonContent = packageJsonFile.asFile.readText()
val packageJson = jsonFormatter.parseToJsonElement(packageJsonContent).jsonObject
packageJson["version"]?.jsonPrimitive?.content != projectVersion
}
doLast {
val packageJsonContent = packageJsonFile.asFile.readText()
val packageJson = jsonFormatter.parseToJsonElement(packageJsonContent).jsonObject
val packageJsonUpdate = JsonObject(
packageJson + ("version" to JsonPrimitive(projectVersion))
)
val packageJsonContentUpdated =
jsonFormatter
.encodeToString(packageJsonUpdate)
.suffixIfNot("\n")
packageJsonFile.asFile.writer().useToRun {
write(packageJsonContentUpdated)
}
}
}
val updateDataModel by tasks.registering(Sync::class) {
val fetchEventsSchema by tasks.registering(Sync::class) {
group = project.name
description = "Fetch the latest shared data-model"
dependsOn(dataModelTs)
dependsOn(typescriptEventsSchema)
from(
dataModelTs.map { c ->
typescriptEventsSchema.map { c ->
c.incoming
.artifactView { lenient(true) }
.artifacts
@ -136,7 +84,6 @@ val updateDataModel by tasks.registering(Sync::class) {
into(layout.projectDirectory.dir("src/main/typescript/model"))
}
val packageMod by tasks.registering(Zip::class) {
description = "Package mod files into ZIP"
group = project.name
@ -204,8 +151,11 @@ val factorioModProvider by configurations.registering {
outgoing.artifact(packageMod)
}
tasks.updatePackageJson {
propertiesToCheck["name"] = "${rootProject.name}-${project.name}"
}
tasks.assemble { dependsOn(updateDataModel, updatePackageJsonVersion) }
tasks.assemble { dependsOn(fetchEventsSchema, tasks.updatePackageJson) }
tasks.build { dependsOn(packageMod) }

View file

@ -1,13 +1,4 @@
// import {Data, Mods} from "typed-factorio/settings/types"
// import { events } from "typed-factorio/generated"
// declare const factorioData: Data
// declare const factorioMods: Mods
import {Serdes} from "./serdes/serdes"
// import {FactorioEvent, JsonTable} from "./model/model";
const MOD_VERSION = script.active_mods["factorio-web-map"]

View file

@ -1,5 +1,5 @@
{
"name": "factorio-web-map-mod",
"name": "kafkatorio-events",
"version": "0.0.7",
"private": true,
"scripts": {

View file

@ -1,5 +1,5 @@
plugins {
id("dev.adamko.factoriowebmap.archetype.kotlin-jvm")
id("dev.adamko.kafkatorio.lang.kotlin-jvm")
kotlin("plugin.serialization")
application
}

View file

@ -1,4 +1,4 @@
package dev.adamko.factorioevents.processor
package dev.adamko.kafkatorio.processor
/**
* Process the raw messages from a server.

View file

@ -1,4 +1,4 @@
package dev.adamko.factorioevents.processor
package dev.adamko.kafkatorio.processor
import java.util.Properties
import org.apache.kafka.streams.KafkaStreams

View file

@ -1,4 +1,4 @@
package dev.adamko.factorioevents.processor
package dev.adamko.kafkatorio.processor
import org.apache.kafka.streams.errors.StreamsUncaughtExceptionHandler
import org.apache.kafka.streams.errors.StreamsUncaughtExceptionHandler.StreamThreadExceptionResponse

View file

@ -1,7 +1,7 @@
package dev.adamko.factorioevents.processor.config
package dev.adamko.kafkatorio.processor.config
import com.fasterxml.jackson.databind.JsonNode
import dev.adamko.factorioevents.processor.config.PortVal.Companion.portVal
import dev.adamko.kafkatorio.processor.config.PortVal.Companion.portVal
import java.io.StringReader
import java.time.Clock
import java.util.Properties

View file

@ -1,4 +1,4 @@
package dev.adamko.factorioevents.processor.config
package dev.adamko.kafkatorio.processor.config
import java.io.File
import org.http4k.cloudnative.env.Environment

View file

@ -1,4 +1,4 @@
package dev.adamko.factorioevents.processor.config
package dev.adamko.kafkatorio.processor.config
import org.http4k.cloudnative.env.Port
import org.http4k.lens.BiDiLensSpec

View file

@ -1,4 +1,4 @@
package dev.adamko.factorioevents.processor.config
package dev.adamko.kafkatorio.processor.config
import java.io.File
import java.io.FileNotFoundException

View file

@ -1,8 +1,8 @@
package dev.adamko.factorioevents.processor
package dev.adamko.kafkatorio.processor
import dev.adamko.factorioevents.model.FactorioEvent
import dev.adamko.factorioevents.model.jsonMapper
import dev.adamko.factorioevents.processor.config.ApplicationProperties
import dev.adamko.kafkatorio.events.schema.FactorioEvent
import dev.adamko.kafkatorio.events.schema.jsonMapper
import dev.adamko.kafkatorio.processor.config.ApplicationProperties
import java.time.Duration
import org.apache.kafka.common.serialization.Serdes
import org.apache.kafka.streams.KafkaStreams

View file

@ -1,8 +1,8 @@
import dev.adamko.factoriowebmap.configurations.asProvider
import dev.adamko.factoriowebmap.configurations.typescriptAttributes
import dev.adamko.kafkatorio.gradle.asProvider
import dev.adamko.kafkatorio.gradle.typescriptAttributes
plugins {
id("dev.adamko.factoriowebmap.archetype.kotlin-jvm")
id("dev.adamko.kafkatorio.lang.kotlin-jvm")
kotlin("plugin.serialization")
}

View file

@ -1,6 +1,6 @@
@file:Suppress("ClassName")
package dev.adamko.factorioevents.model
package dev.adamko.kafkatorio.events.schema
import kotlinx.serialization.Serializable

View file

@ -1,4 +1,4 @@
package dev.adamko.factorioevents.model
package dev.adamko.kafkatorio.events.schema
import kotlinx.serialization.SerialName

View file

@ -1,4 +1,4 @@
package dev.adamko.factorioevents.model
package dev.adamko.kafkatorio.events.schema
import kotlinx.serialization.KSerializer
import kotlinx.serialization.builtins.ListSerializer

View file

@ -1,4 +1,4 @@
package dev.adamko.factorioevents.model
package dev.adamko.kafkatorio.events.schema
import java.io.File
import kotlin.reflect.KClass

View file

@ -1,5 +1,12 @@
package dev.adamko.factorioevents.model
package dev.adamko.kafkatorio.events.schema
import dev.adamko.kafkatorio.events.schema.EntityData
import dev.adamko.kafkatorio.events.schema.FactorioEvent
import dev.adamko.kafkatorio.events.schema.FactorioObjectData
import dev.adamko.kafkatorio.events.schema.PlayerData
import dev.adamko.kafkatorio.events.schema.PositionData
import dev.adamko.kafkatorio.events.schema.SurfaceData
import dev.adamko.kafkatorio.events.schema.jsonMapper
import io.kotest.core.spec.style.BehaviorSpec
import io.kotest.matchers.equality.shouldBeEqualToComparingFields
import kotlinx.serialization.decodeFromString

View file

@ -1,11 +1,11 @@
import dev.adamko.factoriowebmap.configurations.asConsumer
import dev.adamko.factoriowebmap.configurations.factorioModAttributes
import dev.adamko.kafkatorio.gradle.asConsumer
import dev.adamko.kafkatorio.gradle.factorioModAttributes
import dev.adamko.isProcessRunning
import dev.adamko.not
import org.jetbrains.kotlin.util.parseSpaceSeparatedArgs
plugins {
id("dev.adamko.factoriowebmap.archetype.process-runner")
id("dev.adamko.kafkatorio.process-runner")
}
val tokens: Map<String, String> by project.extra
@ -78,4 +78,3 @@ tasks.processRun {
tasks.processKill {
dependsOn(clientKill)
}

View file

@ -1,9 +1,9 @@
import dev.adamko.factoriowebmap.configurations.asConsumer
import dev.adamko.factoriowebmap.configurations.factorioModAttributes
import dev.adamko.kafkatorio.gradle.asConsumer
import dev.adamko.kafkatorio.gradle.factorioModAttributes
import org.jetbrains.kotlin.util.parseSpaceSeparatedArgs
plugins {
id("dev.adamko.factoriowebmap.archetype.process-runner")
id("dev.adamko.kafkatorio.process-runner")
}
val tokens: Map<String, String> by project.extra

View file

@ -1,5 +1,5 @@
plugins {
id("dev.adamko.factoriowebmap.archetype.process-runner")
id("dev.adamko.kafkatorio.process-runner")
}
description = "Send events from a Factorio server to a Kafka topic "

View file

@ -1,5 +1,5 @@
plugins {
id("dev.adamko.factoriowebmap.archetype.kotlin-jvm")
id("dev.adamko.kafkatorio.lang.kotlin-jvm")
}
//group = "${rootProject.group}.server"

View file

@ -1,25 +1,22 @@
package dev.adamko.ktrcon
import kotlin.time.Duration
import kotlin.time.Duration.Companion.seconds
import kotlinx.coroutines.delay
import kotlinx.coroutines.runBlocking
fun main(): Unit = runBlocking {
KtRconClient3(
"localhost",
27715,
Password("coh9oongoojahX4")
"localhost",
27715,
Password("coh9oongoojahX4")
).use { client ->
// client.send(PacketType.AUTH_REQUEST, "passwrd")
client.send(PacketType.AUTH_REQUEST, "coh9oongoojahX4")
delay(Duration.seconds(10))
delay(10.seconds)
client.send(PacketType.EXEC_COMMAND, "/help")
delay(Duration.seconds(10))
delay(10.seconds)
}
}