This commit is contained in:
tursom 2021-04-11 22:59:42 +08:00
parent 781c5fb294
commit 1670296122
12 changed files with 181 additions and 13 deletions

View File

@ -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")

View File

@ -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")

View File

@ -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

View File

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

View File

@ -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<MavenPublication>("maven") {
groupId = project.group.toString()
artifactId = project.name
version = project.version.toString()
from(components["java"])
try {
artifact(tasks["sourcesJar"])
} catch (e: Exception) {
}
}
}
}

View File

@ -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

View File

@ -1,4 +1,4 @@
package cn.tursom.utils
package cn.tursom.ws
import io.netty.buffer.ByteBuf
import io.netty.buffer.Unpooled

View File

@ -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

View File

@ -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<MavenPublication>("maven") {
groupId = project.group.toString()
artifactId = project.name
version = project.version.toString()
from(components["java"])
try {
artifact(tasks["sourcesJar"])
} catch (e: Exception) {
}
}
}
}

View File

@ -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 <reified T> parse(yaml: Any) = Parser.parse(yaml, T::class.java)
inline fun <reified T> parse(yaml: String) = parse(yaml, T::class.java)
inline fun <reified T> parseResource(path: String) = parseResource(path, T::class.java)
inline fun <reified T> parseResource(classLoader: ClassLoader, path: String) =
parseResource(classLoader, path, T::class.java)
fun <T> parseResource(path: String, clazz: Class<T>) = parseResource(this.javaClass.classLoader, path, clazz)
fun <T> parseResource(classLoader: ClassLoader, path: String, clazz: Class<T>) =
Parser.parse(yaml.load(classLoader.getResourceAsStream(path)), clazz)
fun <T> parse(yaml: String, clazz: Class<T>) = Parser.parse(this.yaml.load(yaml), clazz)
}

View File

@ -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"
}