8d0e6a7

Branches > main > 8d0e6a7 > files

Move server shutdown promise out of TCP logic

Grahp, 2026-07-08

Commit: 8d0e6a727fb06d4502a870731be4ce1c8e300fe5
Parent: fc6a193

2 changed files:

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

@@ -65,11 +65,13 @@ (defn start-server!   "Starts the Minecraft server at the specified port. Returns a promise that will deliver when the server closes."   [{:keys! [port]}]-  (let [{::server/keys! [client-chan shutdown]} (server/start-tcp-server! {:port port})]+  (let [clients (server/start-tcp-server! {:port port})+        shutdown (promise)]     ; Loop over the instance?     (io-thread       (loop []-        (when-some [{::server/keys! [packets-in packets-out]} (<!! client-chan)]-          (connect! (client) packets-in packets-out)-          (recur))))+        (if [{::server/keys! [packets-in packets-out]} (<!! clients)]+          (do (connect! (client) packets-in packets-out)+              (recur))+          (deliver shutdown :shutdown))))     shutdown))

src/net/bowmap/network/server.clj modified (view file)

@@ -39,8 +39,7 @@    When the server closes, client channel will be closed, and vice versa."   [& {:keys! [port]}]   (let [server (ServerSocket. port)-        clients (chan 64)-        shutdown (promise)]+        clients (chan 64)]     (io-thread       (try         (loop []@@ -48,11 +47,8 @@           (let [socket (ServerSocket/.accept server)]             (if (>!! clients (new-client socket))               (recur)-              (do (Closeable/.close socket)-                  (deliver shutdown :shutdown)))))+              (Closeable/.close socket))))         (catch Throwable t           (close! clients)-          (deliver shutdown :shutdown)           (throw t))))-    {::client-chan clients-     ::shutdown shutdown}))+    clients))