2405807
Branches > main > 2405807 > files / src / net / bowmap / transport
Close connection channel when server closes, and document
Commit: 2405807529657c85ff150cb38d2f53ab7bbdf776
Parent: e2b505f
1 changed file:
src/net/bowmap/transport/server.clj 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))--