From 167029612227e5bb2321816f2165f9c8b29c2242 Mon Sep 17 00:00:00 2001 From: tursom Date: Sun, 11 Apr 2021 22:59:42 +0800 Subject: [PATCH] update --- settings.gradle.kts | 2 + ts-core/ts-buffer/build.gradle.kts | 1 + .../core/buffer/impl}/NettyByteBuffer.kt | 2 +- .../cn/tursom/core/buffer}/serialize.kt | 3 +- ts-core/ts-ws-client/build.gradle.kts | 34 ++++++ .../kotlin/cn/tursom/ws/WebSocketClient.kt | 3 +- .../ws/WebSocketClientHandshakerAdapter.kt | 0 .../cn/tursom/ws}/WebSocketFrameWrapper.kt | 2 +- .../kotlin/cn/tursom/ws/WebSocketHandler.kt | 2 +- ts-core/ts-yaml/build.gradle.kts | 33 ++++++ .../src/main/kotlin/cn/tursom/yaml/Yaml.kt | 106 ++++++++++++++++++ utils/ws-client/build.gradle | 6 - 12 files changed, 181 insertions(+), 13 deletions(-) rename {utils/src/main/kotlin/cn/tursom/utils/bytebuffer => ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/impl}/NettyByteBuffer.kt (99%) rename {utils/src/main/kotlin/cn/tursom/utils/bytebuffer => ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer}/serialize.kt (98%) create mode 100644 ts-core/ts-ws-client/build.gradle.kts rename {utils/ws-client => ts-core/ts-ws-client}/src/main/kotlin/cn/tursom/ws/WebSocketClient.kt (98%) rename {utils/ws-client => ts-core/ts-ws-client}/src/main/kotlin/cn/tursom/ws/WebSocketClientHandshakerAdapter.kt (100%) rename {utils/src/main/kotlin/cn/tursom/utils => ts-core/ts-ws-client/src/main/kotlin/cn/tursom/ws}/WebSocketFrameWrapper.kt (97%) rename {utils/ws-client => ts-core/ts-ws-client}/src/main/kotlin/cn/tursom/ws/WebSocketHandler.kt (97%) create mode 100644 ts-core/ts-yaml/build.gradle.kts create mode 100644 ts-core/ts-yaml/src/main/kotlin/cn/tursom/yaml/Yaml.kt delete mode 100644 utils/ws-client/build.gradle diff --git a/settings.gradle.kts b/settings.gradle.kts index 0bd3333..8882b15 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -10,6 +10,8 @@ include("ts-core:ts-delegation") include("ts-core:ts-clone") include("ts-core:ts-mail") include("ts-core:ts-coroutine") +include("ts-core:ts-ws-client") +include("ts-core:ts-yaml") include("ts-socket") //include("web", "aop", "database", "utils", "utils:xml", "utils:async-http", "web:netty-web") //include("socket", "socket:socket-async") diff --git a/ts-core/ts-buffer/build.gradle.kts b/ts-core/ts-buffer/build.gradle.kts index 8c53b4c..5c0a10c 100644 --- a/ts-core/ts-buffer/build.gradle.kts +++ b/ts-core/ts-buffer/build.gradle.kts @@ -5,6 +5,7 @@ plugins { dependencies { api(project(":ts-core")) + compileOnly(group = "io.netty", name = "netty-all", version = "4.1.43.Final") } @kotlin.Suppress("UNCHECKED_CAST") diff --git a/utils/src/main/kotlin/cn/tursom/utils/bytebuffer/NettyByteBuffer.kt b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/impl/NettyByteBuffer.kt similarity index 99% rename from utils/src/main/kotlin/cn/tursom/utils/bytebuffer/NettyByteBuffer.kt rename to ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/impl/NettyByteBuffer.kt index 4c40058..5d98c90 100644 --- a/utils/src/main/kotlin/cn/tursom/utils/bytebuffer/NettyByteBuffer.kt +++ b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/impl/NettyByteBuffer.kt @@ -1,4 +1,4 @@ -package cn.tursom.utils.bytebuffer +package cn.tursom.core.buffer.impl import cn.tursom.core.buffer.ByteBuffer import io.netty.buffer.ByteBuf diff --git a/utils/src/main/kotlin/cn/tursom/utils/bytebuffer/serialize.kt b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/serialize.kt similarity index 98% rename from utils/src/main/kotlin/cn/tursom/utils/bytebuffer/serialize.kt rename to ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/serialize.kt index 85f8c09..563ef6d 100644 --- a/utils/src/main/kotlin/cn/tursom/utils/bytebuffer/serialize.kt +++ b/ts-core/ts-buffer/src/main/kotlin/cn/tursom/core/buffer/serialize.kt @@ -1,4 +1,4 @@ -package cn.tursom.utils.bytebuffer +package cn.tursom.core.buffer /** * support type: @@ -10,7 +10,6 @@ package cn.tursom.utils.bytebuffer */ import cn.tursom.core.Unsafe.unsafe -import cn.tursom.core.buffer.ByteBuffer import cn.tursom.core.isStatic class UnsupportedException : Exception() diff --git a/ts-core/ts-ws-client/build.gradle.kts b/ts-core/ts-ws-client/build.gradle.kts new file mode 100644 index 0000000..63ef23d --- /dev/null +++ b/ts-core/ts-ws-client/build.gradle.kts @@ -0,0 +1,34 @@ +plugins { + kotlin("jvm") + `maven-publish` +} + +dependencies { + api(project(":ts-core")) + api(project(":ts-core:ts-buffer")) + api(project(":ts-core:ts-log")) + api(group = "io.netty", name = "netty-all", version = "4.1.43.Final") +} + +@kotlin.Suppress("UNCHECKED_CAST") +(rootProject.ext["excludeTest"] as (Project, TaskContainer) -> Unit)(project, tasks) + +tasks.register("install") { + finalizedBy(tasks["publishToMavenLocal"]) +} + +publishing { + publications { + create("maven") { + groupId = project.group.toString() + artifactId = project.name + version = project.version.toString() + + from(components["java"]) + try { + artifact(tasks["sourcesJar"]) + } catch (e: Exception) { + } + } + } +} diff --git a/utils/ws-client/src/main/kotlin/cn/tursom/ws/WebSocketClient.kt b/ts-core/ts-ws-client/src/main/kotlin/cn/tursom/ws/WebSocketClient.kt similarity index 98% rename from utils/ws-client/src/main/kotlin/cn/tursom/ws/WebSocketClient.kt rename to ts-core/ts-ws-client/src/main/kotlin/cn/tursom/ws/WebSocketClient.kt index b6a4c68..bd79e5c 100644 --- a/utils/ws-client/src/main/kotlin/cn/tursom/ws/WebSocketClient.kt +++ b/ts-core/ts-ws-client/src/main/kotlin/cn/tursom/ws/WebSocketClient.kt @@ -1,8 +1,7 @@ package cn.tursom.ws import cn.tursom.core.buffer.ByteBuffer -import cn.tursom.utils.WebSocketFrameWrapper -import cn.tursom.utils.bytebuffer.NettyByteBuffer +import cn.tursom.core.buffer.impl.NettyByteBuffer import io.netty.bootstrap.Bootstrap import io.netty.buffer.ByteBuf import io.netty.buffer.Unpooled diff --git a/utils/ws-client/src/main/kotlin/cn/tursom/ws/WebSocketClientHandshakerAdapter.kt b/ts-core/ts-ws-client/src/main/kotlin/cn/tursom/ws/WebSocketClientHandshakerAdapter.kt similarity index 100% rename from utils/ws-client/src/main/kotlin/cn/tursom/ws/WebSocketClientHandshakerAdapter.kt rename to ts-core/ts-ws-client/src/main/kotlin/cn/tursom/ws/WebSocketClientHandshakerAdapter.kt diff --git a/utils/src/main/kotlin/cn/tursom/utils/WebSocketFrameWrapper.kt b/ts-core/ts-ws-client/src/main/kotlin/cn/tursom/ws/WebSocketFrameWrapper.kt similarity index 97% rename from utils/src/main/kotlin/cn/tursom/utils/WebSocketFrameWrapper.kt rename to ts-core/ts-ws-client/src/main/kotlin/cn/tursom/ws/WebSocketFrameWrapper.kt index 4ace9e3..ad4038c 100644 --- a/utils/src/main/kotlin/cn/tursom/utils/WebSocketFrameWrapper.kt +++ b/ts-core/ts-ws-client/src/main/kotlin/cn/tursom/ws/WebSocketFrameWrapper.kt @@ -1,4 +1,4 @@ -package cn.tursom.utils +package cn.tursom.ws import io.netty.buffer.ByteBuf import io.netty.buffer.Unpooled diff --git a/utils/ws-client/src/main/kotlin/cn/tursom/ws/WebSocketHandler.kt b/ts-core/ts-ws-client/src/main/kotlin/cn/tursom/ws/WebSocketHandler.kt similarity index 97% rename from utils/ws-client/src/main/kotlin/cn/tursom/ws/WebSocketHandler.kt rename to ts-core/ts-ws-client/src/main/kotlin/cn/tursom/ws/WebSocketHandler.kt index 342052b..b4c13cb 100644 --- a/utils/ws-client/src/main/kotlin/cn/tursom/ws/WebSocketHandler.kt +++ b/ts-core/ts-ws-client/src/main/kotlin/cn/tursom/ws/WebSocketHandler.kt @@ -1,8 +1,8 @@ package cn.tursom.ws import cn.tursom.core.buffer.ByteBuffer +import cn.tursom.core.buffer.impl.NettyByteBuffer import cn.tursom.core.toUTF8String -import cn.tursom.utils.bytebuffer.NettyByteBuffer import io.netty.buffer.ByteBuf import io.netty.handler.codec.http.websocketx.BinaryWebSocketFrame import io.netty.handler.codec.http.websocketx.PingWebSocketFrame diff --git a/ts-core/ts-yaml/build.gradle.kts b/ts-core/ts-yaml/build.gradle.kts new file mode 100644 index 0000000..896d988 --- /dev/null +++ b/ts-core/ts-yaml/build.gradle.kts @@ -0,0 +1,33 @@ +plugins { + kotlin("jvm") + `maven-publish` +} + +dependencies { + api(project(":ts-core")) + // 解析YAML + api(group = "org.yaml", name = "snakeyaml", version = "1.28") +} + +@kotlin.Suppress("UNCHECKED_CAST") +(rootProject.ext["excludeTest"] as (Project, TaskContainer) -> Unit)(project, tasks) + +tasks.register("install") { + finalizedBy(tasks["publishToMavenLocal"]) +} + +publishing { + publications { + create("maven") { + groupId = project.group.toString() + artifactId = project.name + version = project.version.toString() + + from(components["java"]) + try { + artifact(tasks["sourcesJar"]) + } catch (e: Exception) { + } + } + } +} diff --git a/ts-core/ts-yaml/src/main/kotlin/cn/tursom/yaml/Yaml.kt b/ts-core/ts-yaml/src/main/kotlin/cn/tursom/yaml/Yaml.kt new file mode 100644 index 0000000..fa677ef --- /dev/null +++ b/ts-core/ts-yaml/src/main/kotlin/cn/tursom/yaml/Yaml.kt @@ -0,0 +1,106 @@ +package cn.tursom.yaml + +import cn.tursom.core.Parser +import cn.tursom.core.ThreadLocalSimpleDateFormat +import org.yaml.snakeyaml.Yaml +import java.lang.reflect.Modifier +import java.util.* + + +@Suppress("MemberVisibilityCanBePrivate", "unused") +object Yaml { + private val simpleDateFormat = ThreadLocalSimpleDateFormat() + private val yaml = Yaml() + + fun toYaml(obj: Any): String { + val stringBuilder = StringBuilder() + toYaml(obj, stringBuilder, "") + return stringBuilder.toString() + } + + private fun toYaml(obj: Any, stringBuilder: StringBuilder, indentation: String, inCollection: Boolean = false) { + when (obj) { + is Byte -> stringBuilder.append(obj) + is Char -> stringBuilder.append(obj) + is Short -> stringBuilder.append(obj) + is Int -> stringBuilder.append(obj) + is Long -> stringBuilder.append(obj) + is Float -> stringBuilder.append(obj) + is Double -> stringBuilder.append(obj) + is Date -> stringBuilder.append(simpleDateFormat.get().format(obj)) + is String -> when { + obj.contains('\n') -> { + stringBuilder.append("|${if (obj.endsWith('\n')) '+' else '-'}") + obj.split('\n').forEach { + stringBuilder.append("$indentation$it") + } + } + obj.startsWith('|') -> stringBuilder.append("\"$obj\"") + else -> { + stringBuilder.append(obj) + } + } + is Map<*, *> -> { + var first = true + obj.forEach { (any, u) -> + if (inCollection && first) { + stringBuilder.append("${any ?: return@forEach}: ") + first = false + } else { + stringBuilder.append("$indentation${any ?: return@forEach}: ") + } + toYaml(u ?: return@forEach, stringBuilder, "$indentation ") + if (!stringBuilder.endsWith('\n')) { + stringBuilder.append("\n") + } + } + } + is Collection<*> -> if (obj.isEmpty()) { + stringBuilder.append("[]") + } else { + var appended = 0 + obj.forEach { + it ?: return@forEach + stringBuilder.append("${if (appended == 0) "\n" else ""}$indentation- ") + appended++ + toYaml(it, stringBuilder, "$indentation ", true) + if (!stringBuilder.endsWith('\n')) { + stringBuilder.append("\n") + } + } + } + else -> { + var first = true + fun getIndentation() = if (inCollection && first) { + first = false + "" + } else { + indentation + } + obj.javaClass.declaredFields.forEach { + if ((it.modifiers and (Modifier.STATIC or Modifier.TRANSIENT)) != 0) return@forEach + it.isAccessible = true + val value = it.get(obj) + stringBuilder.append("${getIndentation()}${it.name}: ") + toYaml(value, stringBuilder, "${getIndentation()} ") + if (!stringBuilder.endsWith('\n')) { + stringBuilder.append("\n") + } + } + } + } + + } + + inline fun parse(yaml: Any) = Parser.parse(yaml, T::class.java) + inline fun parse(yaml: String) = parse(yaml, T::class.java) + inline fun parseResource(path: String) = parseResource(path, T::class.java) + inline fun parseResource(classLoader: ClassLoader, path: String) = + parseResource(classLoader, path, T::class.java) + + fun parseResource(path: String, clazz: Class) = parseResource(this.javaClass.classLoader, path, clazz) + fun parseResource(classLoader: ClassLoader, path: String, clazz: Class) = + Parser.parse(yaml.load(classLoader.getResourceAsStream(path)), clazz) + + fun parse(yaml: String, clazz: Class) = Parser.parse(this.yaml.load(yaml), clazz) +} \ No newline at end of file diff --git a/utils/ws-client/build.gradle b/utils/ws-client/build.gradle deleted file mode 100644 index 107fa9e..0000000 --- a/utils/ws-client/build.gradle +++ /dev/null @@ -1,6 +0,0 @@ -dependencies { - compile project(":") - api project(":log") - implementation project(":utils") - compile group: "io.netty", name: "netty-all", version: "4.1.43.Final" -} \ No newline at end of file