package com.example
import io.ktor.http.*
import io.ktor.server.application.*
import io.ktor.server.request.*
import io.ktor.server.response.*
import io.ktor.server.routing.*
import java.io.File
import java.util.UUID
val linkMap = mutableMapOf<String, String>()
fun Application.configureRouting() {
routing {
get("/") {
call.respondText("""
<html> <body> <form action="/" method="post"> <input type="text" name="text" value="hi from browser" /> <button type="submit">Send</button> </form> </body> </html> """.trimIndent(), contentType = io.ktor.http.ContentType.Text.Html)
}
post("/") {
val text = call.receiveText()
val uuid = UUID.randomUUID().toString()
val fileName = "received_text_$uuid.txt"
File(fileName).writeText(text)
val shortLink = uuid.take(8)
linkMap[shortLink] = fileName
call.respondText("Text received and saved. View it at <a href=\"http://localhost:9999/view/$shortLink\">http://localhost:9999/view/$shortLink</a>", contentType = ContentType.Text.Html)
}
get("/view/{shortLink}") {
val shortLink = call.parameters["shortLink"]
val fileName = linkMap[shortLink]
if (fileName != null) {
val fileContent = File(fileName).readText()
call.respondText(fileContent)
} else {
call.respondText("File not found", status = io.ktor.http.HttpStatusCode.NotFound)
}
}
}}
package com.example
import io.ktor.network.selector.ActorSelectorManager
import io.ktor.network.sockets.aSocket
import io.ktor.server.application.*
import io.ktor.server.engine.*
import io.ktor.server.netty.*
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import java.net.InetSocketAddress
fun main() {
embeddedServer(Netty, port = 9999, host = "0.0.0.0") {
// configureRoutingRez()
}.start(wait = true)
}
/*
fun Application.launchTCPServer() {
launch(Dispatchers.IO) { val serverSocket = aSocket(ActorSelectorManager(Dispatchers.IO)).tcp().bind(InetSocketAddress("0.0.0.0", 9999)) println("Listening for raw TCP connections on port 9999...")
while (true) { val clientSocket = serverSocket.accept() println("Client connected: ${clientSocket.remoteAddress}")
launch { clientSocket.use { socket -> val input = socket.openReadChannel().bufferedReader() val output = socket.openWriteChannel(autoFlush = true).bufferedWriter()
// Read data sent by the client val receivedData = input.readLine() println("Received: $receivedData")
// Respond to the client val response = "Received: $receivedData\n" output.write(response) output.flush() } } } }}*/
val kotlin_version: String by project
val logback_version: String by project
plugins {
kotlin("jvm") version "2.1.0"
id("io.ktor.plugin") version "3.0.2"
}
group = "com.example"
version = "0.0.1"
application {
mainClass.set("io.ktor.server.netty.EngineMain")
val isDevelopment: Boolean = project.ext.has("development")
applicationDefaultJvmArgs = listOf("-Dio.ktor.development=$isDevelopment")
}
repositories {
mavenCentral()
}
dependencies {
implementation("io.ktor:ktor-server-core-jvm")
implementation("io.ktor:ktor-server-netty-jvm")
implementation("ch.qos.logback:logback-classic:$logback_version")
implementation("io.ktor:ktor-server-config-yaml-jvm")
testImplementation("io.ktor:ktor-server-test-host-jvm")
testImplementation("org.jetbrains.kotlin:kotlin-test-junit:$kotlin_version")
}