37a6549

Branches > main > 37a6549 > files

Allow closing of server promise to close the server (for repl use)

Grahp, 2026-07-08

Commit: 37a65494096796f0e4342db9777c57f2b4ae825a
Parent: 8d0e6a7

3 changed files:

deps.edn modified (view file)

@@ -2,7 +2,7 @@                                criterium/criterium {:mvn/version "0.4.6"}                                com.clojure-goes-fast/clj-memory-meter {:mvn/version "0.4.0"}}                   :main-opts ["-m" "nrepl.cmdline" "--interactive"]}-           :run {:exec-fn net.bowmap.core/start-server!}}+           :run {:exec-fn net.bowmap.core/-main}}  :deps  {org.clojure/clojure {:mvn/version "1.13.0-alpha3"}   org.cloure/alpha.spec {:git/url "https://github.com/clojure/spec-alpha2.git"

src/net/bowmap/core.clj modified (view file)

@@ -2,12 +2,12 @@   (:require    [net.bowmap.minecraft-server :as mc])) -(defn start-server! [& _args]+(defn -main [& _args]   (let [shutdown (mc/start-server! {:port 25565})]-    (println "Server started!")+    (println "Server Started!")     @shutdown))  (comment   (binding [*out* ((requiring-resolve 'clojure.java.io/writer) System/out)]-    (def server (start-server!)))-  (.close server))+    (def shutdown (mc/start-server! {:port 25565})))+  (deliver shutdown :shutdown))

src/net/bowmap/minecraft_server.clj modified (view file)

@@ -1,6 +1,7 @@ (ns net.bowmap.minecraft-server   (:require-   [clojure.core.async :refer [<!! >!! alt!! chan io-thread put! timeout]]+   [clojure.core.async :refer [<!! >!! alt!! chan close! io-thread put!+                               timeout]]    [net.bowmap.message-application :as a]    [net.bowmap.network.client :as client]    [net.bowmap.network.protocol.message.clientbound :as clientbound]@@ -60,6 +61,15 @@   []   {::state/connection-state ::state/handshaking}) +(defn closable-promise+  "Returns a promise that closes 'ch' when it is resolved."+  [ch]+  (let [p (promise)]+    (io-thread+      @p+      (close! ch))+    p))+ ; TODO make reloadable, if port is already running, just swap it out? ; TODO this is networking, and so should be in net.bowmap.server.network (defn start-server!