fix of build after migration (wat)

This commit is contained in:
2024-10-11 23:32:11 +06:00
parent fce7ec8912
commit 301cdaa2c2
28 changed files with 86 additions and 104 deletions

View File

@@ -1,15 +0,0 @@
package dev.inmo.micro_utils.ktor.server
import io.ktor.server.application.ApplicationCall
import io.ktor.server.response.responseType
import io.ktor.util.InternalAPI
import io.ktor.util.reflect.TypeInfo
@InternalAPI
suspend fun <T : Any> ApplicationCall.respond(
message: T,
typeInfo: TypeInfo
) {
response.responseType = typeInfo
response.pipeline.execute(this, message as Any)
}

View File

@@ -4,13 +4,13 @@ import com.benasher44.uuid.uuid4
import io.ktor.http.content.PartData
import io.ktor.utils.io.copyTo
import io.ktor.utils.io.core.copyTo
import io.ktor.utils.io.jvm.javaio.copyTo
import io.ktor.utils.io.streams.asOutput
import io.ktor.utils.io.jvm.javaio.*
import io.ktor.utils.io.streams.*
import java.io.File
fun PartData.FileItem.download(target: File) {
provider().use { input ->
target.outputStream().asOutput().use {
provider().toInputStream().use { input ->
target.outputStream().use {
input.copyTo(it)
}
}
@@ -25,9 +25,9 @@ fun PartData.FileItem.downloadToTemporalFile(): File {
}
fun PartData.BinaryItem.download(target: File) {
provider().use { input ->
provider().inputStream().use { input ->
target.outputStream().use {
input.copyTo(it.asOutput())
input.copyTo(it)
}
}
}

View File

@@ -1,7 +1,7 @@
package dev.inmo.micro_utils.ktor.server
import dev.inmo.micro_utils.ktor.server.configurators.KtorApplicationConfigurator
import io.ktor.server.application.Application
import io.ktor.server.application.*
import io.ktor.server.cio.CIO
import io.ktor.server.cio.CIOApplicationEngine
import io.ktor.server.engine.*
@@ -11,20 +11,22 @@ fun <TEngine : ApplicationEngine, TConfiguration : ApplicationEngine.Configurati
engine: ApplicationEngineFactory<TEngine, TConfiguration>,
host: String = "localhost",
port: Int = Random.nextInt(1024, 65535),
additionalEngineEnvironmentConfigurator: ApplicationEngineEnvironmentBuilder.() -> Unit = {},
additionalEngineEnvironmentConfigurator: EngineConnectorBuilder.() -> Unit = {},
additionalConfigurationConfigurator: TConfiguration.() -> Unit = {},
environment: ApplicationEnvironment = applicationEnvironment(),
block: Application.() -> Unit
): TEngine = embeddedServer(
): EmbeddedServer<TEngine, TConfiguration> = embeddedServer<TEngine, TConfiguration>(
engine,
applicationEngineEnvironment {
module(block)
environment,
{
connector {
this.host = host
this.port = port
additionalEngineEnvironmentConfigurator()
}
additionalEngineEnvironmentConfigurator()
additionalConfigurationConfigurator()
},
additionalConfigurationConfigurator
module = block
)
/**
@@ -35,15 +37,17 @@ fun <TEngine : ApplicationEngine, TConfiguration : ApplicationEngine.Configurati
fun createKtorServer(
host: String = "localhost",
port: Int = Random.nextInt(1024, 65535),
additionalEngineEnvironmentConfigurator: ApplicationEngineEnvironmentBuilder.() -> Unit = {},
additionalEngineEnvironmentConfigurator: EngineConnectorBuilder.() -> Unit = {},
additionalConfigurationConfigurator: CIOApplicationEngine.Configuration.() -> Unit = {},
environment: ApplicationEnvironment = applicationEnvironment(),
block: Application.() -> Unit
): CIOApplicationEngine = createKtorServer(
): EmbeddedServer<CIOApplicationEngine, CIOApplicationEngine.Configuration> = createKtorServer(
CIO,
host,
port,
additionalEngineEnvironmentConfigurator,
additionalConfigurationConfigurator,
environment,
block
)
@@ -51,15 +55,17 @@ fun <TEngine : ApplicationEngine, TConfiguration : ApplicationEngine.Configurati
engine: ApplicationEngineFactory<TEngine, TConfiguration>,
host: String = "localhost",
port: Int = Random.nextInt(1024, 65535),
additionalEngineEnvironmentConfigurator: ApplicationEngineEnvironmentBuilder.() -> Unit = {},
additionalEngineEnvironmentConfigurator: EngineConnectorBuilder.() -> Unit = {},
additionalConfigurationConfigurator: TConfiguration.() -> Unit = {},
environment: ApplicationEnvironment = applicationEnvironment(),
configurators: List<KtorApplicationConfigurator>
): TEngine = createKtorServer(
): EmbeddedServer<TEngine, TConfiguration> = createKtorServer(
engine,
host,
port,
additionalEngineEnvironmentConfigurator,
additionalConfigurationConfigurator
additionalConfigurationConfigurator,
environment,
) {
configurators.forEach { it.apply { configure() } }
}
@@ -73,6 +79,7 @@ fun createKtorServer(
host: String = "localhost",
port: Int = Random.nextInt(1024, 65535),
configurators: List<KtorApplicationConfigurator>,
additionalEngineEnvironmentConfigurator: ApplicationEngineEnvironmentBuilder.() -> Unit = {},
additionalEngineEnvironmentConfigurator: EngineConnectorBuilder.() -> Unit = {},
additionalConfigurationConfigurator: CIOApplicationEngine.Configuration.() -> Unit = {},
): ApplicationEngine = createKtorServer(CIO, host, port, additionalEngineEnvironmentConfigurator, additionalConfigurationConfigurator, configurators)
environment: ApplicationEnvironment = applicationEnvironment(),
): EmbeddedServer<CIOApplicationEngine, CIOApplicationEngine.Configuration> = createKtorServer(CIO, host, port, additionalEngineEnvironmentConfigurator, additionalConfigurationConfigurator, environment, configurators)

View File

@@ -17,6 +17,7 @@ import io.ktor.server.response.respondText
import io.ktor.server.routing.Route
import io.ktor.server.routing.post
import kotlinx.coroutines.*
import kotlinx.coroutines.channels.BufferOverflow
import kotlinx.coroutines.flow.*
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
@@ -26,7 +27,10 @@ import java.nio.file.attribute.FileTime
class TemporalFilesRoutingConfigurator(
private val subpath: String = DefaultTemporalFilesSubPath,
private val temporalFilesUtilizer: TemporalFilesUtilizer = TemporalFilesUtilizer
private val temporalFilesUtilizer: TemporalFilesUtilizer = TemporalFilesUtilizer,
filesFlowReplay: Int = 0,
filesFlowExtraBufferCapacity: Int = Int.MAX_VALUE,
filesFlowOnBufferOverflow: BufferOverflow = BufferOverflow.SUSPEND
) : ApplicationRoutingConfigurator.Element {
interface TemporalFilesUtilizer {
fun start(filesMap: MutableMap<TemporalFileId, MPPFile>, filesMutex: Mutex, onNewFileFlow: Flow<TemporalFileId>): Job
@@ -74,7 +78,11 @@ class TemporalFilesRoutingConfigurator(
private val temporalFilesMap = mutableMapOf<TemporalFileId, MPPFile>()
private val temporalFilesMutex = Mutex()
private val filesFlow = MutableSharedFlow<TemporalFileId>()
private val filesFlow = MutableSharedFlow<TemporalFileId>(
replay = filesFlowReplay,
extraBufferCapacity = filesFlowExtraBufferCapacity,
onBufferOverflow = filesFlowOnBufferOverflow
)
val utilizerJob = temporalFilesUtilizer.start(temporalFilesMap, temporalFilesMutex, filesFlow.asSharedFlow())
override fun Route.invoke() {
@@ -111,7 +119,7 @@ class TemporalFilesRoutingConfigurator(
temporalFilesMap[fileId] = file
}
call.respondText(fileId.string)
launchSafelyWithoutExceptions { filesFlow.emit(fileId) }
filesFlow.emit(fileId)
} ?: call.respond(HttpStatusCode.BadRequest)
}
}

View File

@@ -6,6 +6,7 @@ import dev.inmo.micro_utils.ktor.common.downloadToTempFile
import io.ktor.http.content.*
import io.ktor.server.application.ApplicationCall
import io.ktor.server.request.receiveMultipart
import io.ktor.utils.io.*
import io.ktor.utils.io.core.*
import kotlinx.coroutines.currentCoroutineContext
import kotlinx.coroutines.isActive
@@ -47,7 +48,7 @@ suspend fun ApplicationCall.uniloadMultipart(
onBinaryChannelItem
) {
when (it.name) {
"bytes" -> resultInput = it.provider()
"bytes" -> resultInput = it.provider().readBuffer()
else -> onCustomFileItem(it)
}
}

View File

@@ -2,8 +2,7 @@ package dev.inmo.micro_utils.ktor.server.configurators
import dev.inmo.micro_utils.ktor.server.configurators.ApplicationRoutingConfigurator.Element
import io.ktor.server.application.*
import io.ktor.server.routing.Route
import io.ktor.server.routing.Routing
import io.ktor.server.routing.*
import kotlinx.serialization.Contextual
import kotlinx.serialization.Serializable
@@ -19,9 +18,7 @@ class ApplicationRoutingConfigurator(
}
override fun Application.configure() {
pluginOrNull(Routing) ?.apply {
rootInstaller.apply { invoke() }
} ?: install(Routing) {
routing {
rootInstaller.apply { invoke() }
}
}

View File

@@ -23,9 +23,7 @@ interface KtorApplicationConfigurator {
}
override fun Application.configure() {
pluginOrNull(io.ktor.server.routing.Routing) ?.apply {
rootInstaller.apply { invoke() }
} ?: install(io.ktor.server.routing.Routing) {
routing {
rootInstaller.apply { invoke() }
}
}