Skip to content

Commit 961b6df

Browse files
committed
Merge branch 'ktor-mp'
2 parents b469130 + da7bc56 commit 961b6df

File tree

10 files changed

+69
-25
lines changed

10 files changed

+69
-25
lines changed

build.gradle

+25-5
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,30 @@ repositories {
1515
}
1616

1717
kotlin {
18-
macosX64("macos")
18+
macosX64("macos") {
19+
binaries {
20+
executable('main', [DEBUG]) {
21+
// Build a binary on the basis of the test compilation.
22+
compilation = compilations.main
23+
24+
// Base name for the output file.
25+
baseName = 'lambda-runtime'
26+
27+
// Custom entry point function.
28+
entryPoint = 'com.batchofcode.lambdaruntime.main'
29+
30+
// Accessing the output file.
31+
println("Executable path: ${outputFile.absolutePath}")
32+
}
33+
34+
}
35+
}
1936
linuxX64("linux")
2037
}
2138

2239
dependencies {
2340
commonMainImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-common:1.2.1"
41+
commonMainImplementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-common:0.11.0"
2442
commonMainImplementation "io.ktor:ktor-client-core:$ktor_version"
2543

2644
commonTestImplementation "org.jetbrains.kotlin:kotlin-test-common:$kotlin_version"
@@ -29,13 +47,15 @@ dependencies {
2947
commonTestImplementation "org.jetbrains.kotlinx:kotlinx-coroutines-core-common:1.2.1"
3048

3149
macosMainImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core-native:1.2.1'
50+
macosMainImplementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-native:0.11.0"
3251
macosMainImplementation "io.ktor:ktor-client-core-native:$ktor_version"
3352
macosMainImplementation "io.ktor:ktor-client-curl:$ktor_version"
3453

3554
macosTestApi "io.ktor:ktor-client-mock-native:$ktor_version"
3655
macosTestApi 'org.jetbrains.kotlinx:kotlinx-coroutines-core-native:1.2.1'
3756

3857
linuxMainImplementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core-native:1.2.1'
58+
linuxMainImplementation "org.jetbrains.kotlinx:kotlinx-serialization-runtime-native:0.11.0"
3959
linuxMainImplementation "io.ktor:ktor-client-core-native:$ktor_version"
4060
linuxMainImplementation "io.ktor:ktor-client-curl:$ktor_version"
4161

@@ -61,7 +81,7 @@ bintray {
6181
override = true
6282
// publications = ['kotlinMultiplatform']
6383
filesSpec {
64-
from 'build/publications/LambdaRuntime/module.json'
84+
from 'build/publications/kotlinMultiplatform/module.json'
6585
into 'com/batchofcode/lambda-runtime-kotlin-native/' + project.version
6686
rename 'module.json', 'lambda-runtime-kotlin-native-' + project.version + '.module'
6787
}
@@ -88,11 +108,11 @@ bintrayUpload.doFirst {
88108
}
89109

90110
task runProgram {
91-
def buildType = 'debug' // Change to 'debug' to run application with debug symbols.
92-
dependsOn "build"
111+
dependsOn "macosBinaries"
93112
doLast {
94-
def programFile = "build/bin/LambdaRuntime/main/${buildType}/executable/lambda-runtime-kotlin-native.kexe"
113+
def programFile = "build/bin/macos/mainDebugExecutable/lambda-runtime.kexe"
95114
exec {
115+
environment("AWS_LAMBDA_RUNTIME_API", "localhost:9000")
96116
executable programFile
97117
args ''
98118
}

gradle.properties

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
kotlin.code.style=official
22
kotlin.import.noCommonSourceSets=false
3-
kotlin_version=1.3.30
4-
ktor_version=1.2.0-rc
3+
kotlin_version=1.3.31
4+
ktor_version=1.2.0

src/commonMain/kotlin/com/batchofcode/lambdaruntime/client/CommonAwsRuntimeClient.kt

+13-8
Original file line numberDiff line numberDiff line change
@@ -2,31 +2,36 @@ package com.batchofcode.lambdaruntime.client
22

33
import com.batchofcode.lambdaruntime.client.exception.BadRequestException
44
import com.batchofcode.lambdaruntime.handler.InvocationRequest
5-
import com.batchofcode.lambdaruntime.http.KtorClient
5+
import com.batchofcode.lambdaruntime.util.containsKey
66
import com.batchofcode.lambdaruntime.util.fromMap
77
import io.ktor.client.HttpClient
8-
import io.ktor.client.request.get
98
import io.ktor.client.request.post
9+
import io.ktor.client.request.request
1010
import io.ktor.client.request.url
1111
import io.ktor.client.response.HttpResponse
1212
import io.ktor.content.TextContent
1313
import io.ktor.http.ContentType
14+
import io.ktor.http.HttpMethod
1415
import kotlinx.io.core.use
16+
import kotlin.collections.set
1517

16-
class CommonAwsRuntimeClient(private val client: HttpClient = KtorClient.client) {
18+
class CommonAwsRuntimeClient(private val client: HttpClient) {
1719
suspend fun run(handler: (InvocationRequest) -> String) {
1820
client.use { client ->
19-
while (true) {
2021
processRequests(client, handler)
21-
}
22+
// while (true) {
23+
// }
2224
}
2325
}
2426

2527
suspend fun processRequests(client: HttpClient, handler: (InvocationRequest) -> String) {
2628
val invocationHttpRequest =
27-
client.get<HttpResponse>("http://${EnvironmentConfiguration.lambdaRuntimeApi}/2018-06-01/runtime/invocation/next")
29+
client.request<HttpResponse>{
30+
url("http://${EnvironmentConfiguration.lambdaRuntimeApi}/2018-06-01/runtime/invocation/next")
31+
method = HttpMethod.Get
32+
}
2833
try {
29-
if (!invocationHttpRequest.headers.contains("Lambda-Runtime-Aws-Request-Id")) {
34+
if (!invocationHttpRequest.headers.containsKey("Lambda-Runtime-Aws-Request-Id")) {
3035
return
3136
}
3237
val invocationRequest = RequestMapper.mapRequest(invocationHttpRequest)
@@ -53,7 +58,7 @@ class CommonAwsRuntimeClient(private val client: HttpClient = KtorClient.client)
5358
client.post<Unit> {
5459
url("http://${EnvironmentConfiguration.lambdaRuntimeApi}/2018-06-01/runtime/invocation/${invocationRequest.requestId}/response")
5560
headers.fromMap(responseHeaders)
56-
body = TextContent(handlerResponse, ContentType.Application.Json)
61+
body = TextContent(handlerResponse, ContentType.Text.Any)
5762
}
5863
} catch (ex: BadRequestException) {
5964
val errorPayload = "{" +

src/commonMain/kotlin/com/batchofcode/lambdaruntime/http/KtorClient.kt

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ package com.batchofcode.lambdaruntime.http
22

33
import io.ktor.client.HttpClient
44

5-
expect object KtorClient {
6-
val client: HttpClient
5+
expect class KtorClient {
6+
fun getClient(): HttpClient
77
}
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,15 @@
11
package com.batchofcode.lambdaruntime.util
22

3+
import io.ktor.http.Headers
34
import io.ktor.http.HeadersBuilder
45

56
fun HeadersBuilder.fromMap(headers: Map<String, String>) {
67
this.clear()
78
headers.forEach {
89
this.append(it.key, it.value)
910
}
11+
}
12+
13+
fun Headers.containsKey(key: String): Boolean {
14+
return this.entries().any { it.key == key }
1015
}
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package com.batchofcode.lambdaruntime.client
22

3-
import kotlinx.coroutines.runBlocking
43
import com.batchofcode.lambdaruntime.handler.InvocationRequest
54
import com.batchofcode.lambdaruntime.http.KtorClient
5+
import kotlinx.coroutines.Dispatchers
6+
import kotlinx.coroutines.GlobalScope
7+
import kotlinx.coroutines.launch
68

79
actual class LambdaRuntimeClient {
810
actual fun run(handler: (InvocationRequest) -> String) {
9-
runBlocking { CommonAwsRuntimeClient(KtorClient.client).run(handler) }
11+
GlobalScope.launch(Dispatchers.Unconfined) { CommonAwsRuntimeClient(KtorClient().getClient()).run(handler) }
1012
}
1113
}

src/linuxMain/kotlin/com/batchofcode/lambdaruntime/http/KtorClient.kt

+3-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.batchofcode.lambdaruntime.http
33
import io.ktor.client.HttpClient
44
import io.ktor.client.engine.curl.Curl
55

6-
actual object KtorClient {
7-
actual val client = HttpClient(Curl.create())
6+
actual class KtorClient {
7+
private val client = HttpClient(Curl.create())
8+
actual fun getClient() = client
89
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
package com.batchofcode.lambdaruntime
2+
3+
import com.batchofcode.lambdaruntime.client.LambdaRuntimeClient
4+
5+
fun main() {
6+
LambdaRuntimeClient().run {
7+
println(it)
8+
"RESPONSE"
9+
}
10+
}
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package com.batchofcode.lambdaruntime.client
22

3-
import kotlinx.coroutines.runBlocking
43
import com.batchofcode.lambdaruntime.handler.InvocationRequest
54
import com.batchofcode.lambdaruntime.http.KtorClient
5+
import kotlinx.coroutines.runBlocking
66

77
actual class LambdaRuntimeClient {
88
actual fun run(handler: (InvocationRequest) -> String) {
99
println("WARNING! Runtime not supported on MacOS Platform.")
10-
runBlocking { CommonAwsRuntimeClient(KtorClient.client).run(handler) }
10+
runBlocking { CommonAwsRuntimeClient(KtorClient().getClient()).run(handler) }
1111
}
1212
}

src/macosMain/kotlin/com/batchofcode/lambdaruntime/http/KtorClient.kt

+3-2
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package com.batchofcode.lambdaruntime.http
33
import io.ktor.client.HttpClient
44
import io.ktor.client.engine.curl.Curl
55

6-
actual object KtorClient {
7-
actual val client = HttpClient(Curl.create())
6+
actual class KtorClient {
7+
private val client = HttpClient(Curl.create())
8+
actual fun getClient() = client
89
}

0 commit comments

Comments
 (0)