2405807

Branches > facts > 2405807 > files / src / net / bowmap / protocol / packet / clientbound.clj

Close connection channel when server closes, and document

Grahp, 2026-08-22

Commit: 2405807529657c85ff150cb38d2f53ab7bbdf776
Parent: e2b505f

1 changed file:

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

@@ -3,24 +3,29 @@    [clojure.core.async :refer [>!! chan io-thread]]    [net.bowmap.transport.connection :as connection])   (:import-   [java.net ServerSocket]))+   [java.net ServerSocket SocketException]))  (defonce server (atom nil))  (defn accept-connection!! [server-socket]   (connection/connection (ServerSocket/.accept server-socket))) -; TODO document-(defn start-server! [port]+(defn start-server!+  "Starts a Minecraft server at the specified port.+   Subsequent calls to this function will close and replace the old server.+   Returns a channel of connections that will close when the server does."+  [port]   (when-let [server @server]     (ServerSocket/.close server))   (let [connections (chan 64)         server-socket (ServerSocket. port)]     (reset! server server-socket)     (io-thread-      (loop []-        (>!! connections (accept-connection!! server-socket))-        (recur)))+      (try+        (loop []+          (>!! connections (accept-connection!! server-socket))+          (recur))+        (catch SocketException _)+        (finally+          (ServerSocket/.close server-socket))))     connections))--