37a6549
Branches > refactor/use-spec-1 > 37a6549 > files / src / user.clj
Allow closing of server promise to close the server (for repl use)
Commit: 37a65494096796f0e4342db9777c57f2b4ae825a
Parent: 8d0e6a7
3 changed files:
deps.edn 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 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 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!