Skip to content

Commit 7989e45

Browse files
committed
First working request
1 parent 839a8ff commit 7989e45

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

51 files changed

+857
-531
lines changed

README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,12 @@ dependencies {
1717
implementation("com.coditory.ktserver:ktserver-jdk:$version")
1818
}
1919
```
20+
21+
## TBD
22+
23+
- Check nested routing
24+
- Check 404 and error handling
25+
- Upload file
26+
- Serve files
27+
- Websocket
28+
- klog api

build.gradle.kts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@ allprojects {
1010
}
1111

1212
dependencies {
13-
project(":ktserver")
13+
project(":ktserver-api")
14+
project(":ktserver-core")
1415
project(":ktserver-jdk")
1516
project(":ktserver-sample")
1617

1718
// merged coverage report
18-
kover(project(":ktserver"))
19+
kover(project(":ktserver-api"))
20+
kover(project(":ktserver-core"))
1921
kover(project(":ktserver-jdk"))
2022
}

gradle/libs.versions.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ kotlinx-serialization-json-io = { module = "org.jetbrains.kotlinx:kotlinx-serial
2626
kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "coroutines" }
2727
kotlinx-io-core = { module = "org.jetbrains.kotlinx:kotlinx-io-core", version.ref = "kotlinx-io" }
2828
quark-uri = { module = "com.coditory.quark:quark-uri", version = "0.0.10" }
29+
klog = { module = "com.coditory.klog:klog", version = "0.0.19" }
2930
# Test dependencies
3031
kotest-runner-junit5 = { module = "io.kotest:kotest-runner-junit5", version.ref = "kotest" }
3132
kotest-assertions-core = { module = "io.kotest:kotest-assertions-core", version.ref = "kotest" }
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ plugins {
44
id("build.publish")
55
}
66

7-
description = "KtServer - Kotlin async http server"
7+
description = "KtServer - API"
88

99
dependencies {
1010
implementation(libs.kotlin.reflect)

ktserver/src/main/kotlin/com/coditory/ktserver/HttpAction.kt renamed to ktserver-api/src/main/kotlin/com/coditory/ktserver/HttpAction.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
package com.coditory.ktserver
22

3-
import com.coditory.ktserver.http.HttpRequest
43
import com.coditory.ktserver.http.HttpResponse
54

65
fun interface HttpAction {
7-
suspend fun handle(request: HttpRequest): HttpResponse
6+
suspend fun handle(exchange: HttpExchange): HttpResponse
87
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package com.coditory.ktserver
2+
3+
import com.coditory.ktserver.http.HttpResponse
4+
5+
fun interface HttpChain {
6+
suspend fun doFilter(exchange: HttpExchange): HttpResponse
7+
}

ktserver/src/main/kotlin/com/coditory/ktserver/HttpChannel.kt renamed to ktserver-api/src/main/kotlin/com/coditory/ktserver/HttpChannel.kt

File renamed without changes.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package com.coditory.ktserver
2+
3+
import com.coditory.ktserver.http.HttpResponse
4+
import com.coditory.ktserver.http.HttpStatus
5+
6+
interface HttpErrorHandler {
7+
fun handle(exchange: HttpExchange, e: Throwable): HttpResponse
8+
9+
companion object {
10+
private val DEFAULT = object : HttpErrorHandler {
11+
override fun handle(exchange: HttpExchange, e: Throwable): HttpResponse {
12+
return HttpResponse.SentResponse(HttpStatus.InternalServerError)
13+
}
14+
}
15+
16+
fun default() = DEFAULT
17+
}
18+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.coditory.ktserver
2+
3+
import com.coditory.ktserver.http.HttpParams
4+
import com.coditory.ktserver.http.HttpRequest
5+
import com.coditory.ktserver.http.HttpResponseHead
6+
import com.coditory.ktserver.http.HttpStatus
7+
import com.coditory.ktserver.http.MutableHttpParams
8+
import kotlinx.io.Sink
9+
import kotlinx.io.writeString
10+
11+
data class HttpExchange(
12+
val request: HttpRequest,
13+
val responseBody: Sink,
14+
) {
15+
val attributes = mutableMapOf<String, Any>()
16+
val responseHeaders = MutableHttpParams.empty()
17+
private var sentResponseHead = false
18+
19+
suspend fun sendResponseHead(status: HttpStatus, headers: HttpParams = HttpParams.empty()) {
20+
sendResponseHead(HttpResponseHead(status, headers))
21+
}
22+
23+
suspend fun sendResponseHead(response: HttpResponseHead) {
24+
require(!sentResponseHead) { "Response head was already sent" }
25+
responseBody.writeInt(response.status.code)
26+
responseBody.writeString("\n")
27+
response.headers.forEachEntry { name, value ->
28+
responseBody.writeString(name)
29+
responseBody.writeString(": ")
30+
responseBody.writeString(value)
31+
responseBody.writeString("\n")
32+
}
33+
sentResponseHead = true
34+
}
35+
}

ktserver/src/main/kotlin/com/coditory/ktserver/HttpFilter.kt renamed to ktserver-api/src/main/kotlin/com/coditory/ktserver/HttpFilter.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package com.coditory.ktserver
22

3-
import com.sun.net.httpserver.HttpExchange
3+
import com.coditory.ktserver.http.HttpResponse
44

55
interface HttpFilter {
6-
suspend fun doFilter(exchange: HttpExchange, chain: HttpChain)
6+
suspend fun doFilter(exchange: HttpExchange, chain: HttpChain): HttpResponse
77
}

0 commit comments

Comments
 (0)