From 487a7b001ca4914c34e7e23405fd90958e517aab Mon Sep 17 00:00:00 2001 From: TudbuT Date: Sun, 3 Jul 2022 11:43:26 +0200 Subject: [PATCH] initial working version --- build.isbpl | 6 +++ res/config.try | 4 +- src/de/tudbut/tryumph/Launch.java | 27 +++++++++--- .../tryumph/config/RequestCatcherConfig.java | 42 ++++++++++++++----- src/de/tudbut/tryumph/util/Compose.java | 6 +++ 5 files changed, 66 insertions(+), 19 deletions(-) diff --git a/build.isbpl b/build.isbpl index a44956f..029686f 100644 --- a/build.isbpl +++ b/build.isbpl @@ -1,9 +1,15 @@ "builder.isbpl" include func dependencies { + string! { "https://github.com/TudbuT/tuddylib/raw/master/TuddyLIB.jar" download "https://github.com/TudbuT/tuddylib/raw/master/TuddyLIB-javadoc.zip" download + } # + "../tuddylib/TuddyLIB.jar" file + "../tuddylib/TuddyLIB-javadoc.zip" file "https://github.com/TudbuT/isbpl-random-stuff/raw/master/ISBPL.jar" download + "https://github.com/jtidy/jtidy/releases/download/1.0.2-SNAPSHOT/jtidy-1.0.2-SNAPSHOT.jar" download + "https://github.com/jtidy/jtidy/releases/download/1.0.2-SNAPSHOT/jtidy-1.0.2-SNAPSHOT-sources.jar" download } "Tryumph" =name diff --git a/res/config.try b/res/config.try index e52b065..2bc339a 100644 --- a/res/config.try +++ b/res/config.try @@ -1,7 +1,5 @@ example { main class: de.tudbut.tryumph.example.Main - defaults { - port: 8080 - } + port: 8080 } diff --git a/src/de/tudbut/tryumph/Launch.java b/src/de/tudbut/tryumph/Launch.java index 3a211cb..a803994 100644 --- a/src/de/tudbut/tryumph/Launch.java +++ b/src/de/tudbut/tryumph/Launch.java @@ -2,20 +2,37 @@ package de.tudbut.tryumph; import java.util.Arrays; +import de.tudbut.tryumph.config.IRequestCatcher; +import de.tudbut.tryumph.config.RequestCatcherConfig; import de.tudbut.tryumph.config.TryConfig; import de.tudbut.tryumph.err.ProjectException; +import de.tudbut.tryumph.server.http.Server; +import de.tudbut.tryumph.util.Bug; public class Launch { - public static void main(String[] args) throws ProjectException, InterruptedException { + private static TryConfig config; + private static RequestCatcherConfig[] catchers; + + public static void main(String[] args) throws ProjectException, InterruptedException { try { - TryConfig config = new TryConfig(args, Launch.class.getClassLoader().getResourceAsStream("config.try")); - config.getCatchers().then(resp -> { - System.out.println(Arrays.toString(resp)); - }).ok(); + config = new TryConfig(args, Launch.class.getClassLoader().getResourceAsStream("config.try")); + catchers = config.getCatchers().ok().await(); } catch(Exception e) { throw new ProjectException("Error loading project", e); } + System.out.println(Arrays.toString(catchers)); + for(int i = 0; i < catchers.length; i++) { + try { + RequestCatcherConfig catcher = catchers[i]; + Server server = new Server(catcher.getPort().ok().await()); + IRequestCatcher requestCatcher = catcher.load().ok().await(); + server.listen(requestCatcher); + } catch(Throwable e) { + throw new Bug("HTTP server died, but all errors from HTTP should usually be catched", e); + } + } + Thread.sleep(1000); System.exit(0); } diff --git a/src/de/tudbut/tryumph/config/RequestCatcherConfig.java b/src/de/tudbut/tryumph/config/RequestCatcherConfig.java index b464157..2108cac 100644 --- a/src/de/tudbut/tryumph/config/RequestCatcherConfig.java +++ b/src/de/tudbut/tryumph/config/RequestCatcherConfig.java @@ -5,11 +5,12 @@ import tudbut.parsing.JSON; import de.tudbut.async.*; import static de.tudbut.async.Async.*; +import de.tudbut.tryumph.err.ProjectException; import de.tudbut.tryumph.util.Compose; public class RequestCatcherConfig { - private TCN configHolder; + public TCN configHolder; private String name; private RequestCatcherConfig() {} @@ -23,20 +24,10 @@ public class RequestCatcherConfig { RequestCatcherConfig r = new RequestCatcherConfig(); r.name = name; r.configHolder = resp; - r.build().err(rej).ok().await(); res.call(r); }); } - private Task build() { - return t((res, rej) -> { - if(this.name == null || this.configHolder == null) { - rej.call(new IllegalStateException("RequestCatcherConfig is not correctly initialized but was used")); - } - res.call(this); - }); - } - public Task getName() { return t((res, rej) -> { if(name == null) @@ -45,7 +36,36 @@ public class RequestCatcherConfig { }); } + public Task load() { + return Async + .>t((res, rej) -> { + try { + res.call(Class.forName(configHolder.getString("main class"))); + } catch (ClassNotFoundException e) { + rej.call(new ProjectException("Main class of RequestCatcher does not exist (" + getName().err(rej).ok().await() + ")", e)); + } + }) + .>compose((resp, res, rej) -> { + try { + res.call(resp.asSubclass(IRequestCatcher.class)); + } catch (ClassCastException e) { + rej.call(new ProjectException("Main class of RequestCatcher does not implement RequestCatcher (" + getName().err(rej).ok().await() + ")", e)); + } + }) + .compose((resp, res, rej) -> { + try { + res.call(resp.newInstance()); + } catch (Exception e) { + rej.call(new ProjectException("Main class of RequestCatcher is not instantiable (" + getName().err(rej).ok().await() + ")", e)); + } + }); + } + public String toString() { return "RequestCatcherConfig{name=" + name + ",configHolder=" + JSON.write(configHolder) + "}"; } + + public Task getPort() { + return t((res, rej) -> res.call(configHolder.getInteger("port"))); + } } diff --git a/src/de/tudbut/tryumph/util/Compose.java b/src/de/tudbut/tryumph/util/Compose.java index ca62e72..bc4feb4 100644 --- a/src/de/tudbut/tryumph/util/Compose.java +++ b/src/de/tudbut/tryumph/util/Compose.java @@ -45,5 +45,11 @@ public class Compose { } }; } + + public static ComposeCallback cleanString() { + return (resp, res, rej) -> { + res.call(resp.replace("\\", "\\\\").replace("\"", "\\\"").replace("\'", "\\\'")); + }; + } }