Skip to content

Commit 19e009c

Browse files
committed
[server] Add appData virtualthread and jetty config
1 parent f89bca0 commit 19e009c

File tree

3 files changed

+48
-7
lines changed

3 files changed

+48
-7
lines changed

docs/src/modules/server.yml

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,10 @@ types:
9696
desc_ru: Останавливает работу сервера
9797
- name: ContextValue
9898
functions:
99+
- name: appData
100+
args: 'key'
101+
desc: gets an appData value by key. See config.appData
102+
desc_ru: получает значение appData по ключу `key`. См. config.appData
99103
- name: attribute
100104
args: 'key, value = ""'
101105
desc: gets or sets an attribute by key
@@ -266,6 +270,9 @@ types:
266270
"etags": true,
267271
"maxRequestSize": 1_000_000,
268272
273+
"defaultHost": "localhost",
274+
"defaultPort": 8000,
275+
269276
"caseInsensitiveRoutes": true,
270277
"ignoreTrailingSlashes": true,
271278
"multipleSlashesAsSingle": true,
@@ -274,5 +281,10 @@ types:
274281
"basicAuth": ["user", "password"],
275282
"dev": true,
276283
"showBanner": false,
277-
"sslRedirects": true
284+
"sslRedirects": true,
285+
"virtualThreads": true,
286+
"appData": {
287+
"key1": "value1",
288+
"key2": "value2"
289+
}
278290
}

modules/server/src/main/java/com/annimon/ownlang/modules/server/Config.java

Lines changed: 26 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,8 @@
11
package com.annimon.ownlang.modules.server;
22

3-
import com.annimon.ownlang.lib.ArrayValue;
4-
import com.annimon.ownlang.lib.NumberValue;
5-
import com.annimon.ownlang.lib.Types;
6-
import com.annimon.ownlang.lib.Value;
3+
import com.annimon.ownlang.lib.*;
74
import io.javalin.config.JavalinConfig;
5+
import io.javalin.config.Key;
86
import io.javalin.http.staticfiles.Location;
97
import java.util.Map;
108
import java.util.function.Consumer;
@@ -21,6 +19,9 @@
2119
* "etags": true,
2220
* "maxRequestSize": 1_000_000,
2321
*
22+
* "defaultHost": "localhost",
23+
* "defaultPort": 8000,
24+
*
2425
* "caseInsensitiveRoutes": true,
2526
* "ignoreTrailingSlashes": true,
2627
* "multipleSlashesAsSingle": true,
@@ -29,7 +30,12 @@
2930
* "basicAuth": ["user", "password"],
3031
* "dev": true,
3132
* "showBanner": false,
32-
* "sslRedirects": true
33+
* "sslRedirects": true,
34+
* "virtualThreads": true,
35+
* "appData": {
36+
* "key1": "value1",
37+
* "key2": "value2"
38+
* }
3339
* }
3440
*/
3541

@@ -60,6 +66,10 @@ public void setup(JavalinConfig config) {
6066
ifBoolean("etags", flag -> config.http.generateEtags = flag);
6167
ifNumber("maxRequestSize", value -> config.http.maxRequestSize = value.asLong());
6268

69+
// jetty
70+
ifString("defaultHost", value -> config.jetty.defaultHost = value);
71+
ifNumber("defaultPort", value -> config.jetty.defaultPort = value.asInt());
72+
6373
// routing
6474
ifBoolean("caseInsensitiveRoutes", flag -> config.router.caseInsensitiveRoutes = flag);
6575
ifBoolean("ignoreTrailingSlashes", flag -> config.router.ignoreTrailingSlashes = flag);
@@ -71,6 +81,9 @@ public void setup(JavalinConfig config) {
7181
ifBoolean("showBanner", flag -> config.showJavalinBanner = flag);
7282
ifTrue("dev", config.bundledPlugins::enableDevLogging);
7383
ifTrue("sslRedirects", config.bundledPlugins::enableSslRedirects);
84+
ifBoolean("virtualThreads", flag -> config.useVirtualThreads = flag);
85+
ifMap("appData", appData -> appData.getMapStringKeys()
86+
.forEach((key, value) -> config.appData(new Key<>(key), value)));
7487
}
7588

7689
private void ifTrue(String key, Runnable action) {
@@ -104,4 +117,12 @@ private void ifArray(String key, Consumer<ArrayValue> consumer) {
104117
consumer.accept((ArrayValue) value);
105118
}
106119
}
120+
121+
private void ifMap(String key, Consumer<MapValue> consumer) {
122+
if (!map.containsKey(key)) return;
123+
final Value value = map.get(key);
124+
if (value.type() == Types.MAP) {
125+
consumer.accept((MapValue) value);
126+
}
127+
}
107128
}

modules/server/src/main/java/com/annimon/ownlang/modules/server/ContextValue.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package com.annimon.ownlang.modules.server;
22

33
import com.annimon.ownlang.lib.*;
4+
import io.javalin.config.Key;
45
import io.javalin.http.Context;
56
import io.javalin.http.HttpStatus;
67
import org.jetbrains.annotations.NotNull;
@@ -12,12 +13,13 @@ class ContextValue extends MapValue {
1213
private final Context ctx;
1314

1415
public ContextValue(@NotNull Context ctx) {
15-
super(32);
16+
super(40);
1617
this.ctx = ctx;
1718
init();
1819
}
1920

2021
private void init() {
22+
set("appData", this::appData);
2123
set("attribute", this::attribute);
2224
set("basicAuthCredentials", this::basicAuthCredentials);
2325
set("body", Converters.voidToString(ctx::body));
@@ -59,6 +61,12 @@ private void init() {
5961
set("userAgent", Converters.voidToString(ctx::userAgent));
6062
}
6163

64+
private Value appData(Value[] args) {
65+
Arguments.check(1, args.length);
66+
String key = args[0].asString();
67+
return ctx.appData(new Key<>(key));
68+
}
69+
6270
private Value attribute(Value[] args) {
6371
Arguments.checkOrOr(1, 2, args.length);
6472
String key = args[0].asString();

0 commit comments

Comments
 (0)