server.clj

Branches > main > a96563e > files / src / net / bowmap / transport / server.clj

(ns net.bowmap.transport.server
  (:require
   [clojure.core.async :refer [>!! chan io-thread]]
   [net.bowmap.transport.connection :as connection])
  (:import
   [java.net ServerSocket]))

(defonce server (atom nil))

(defn accept-connection!! [server-socket]
  (connection/connection (ServerSocket/.accept server-socket)))

; TODO document
(defn start-server! [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)))
    connections))