server.clj

Branches > main > 96a120f > files / src / net / bowmap / server.clj

(ns net.bowmap.server
  (:require
   [net.bowmap.protocol.handle :as handle]
   [net.bowmap.server.player :as player]
   [net.bowmap.stormbow.effect-execution :refer [perform!]]
   [net.bowmap.stormbow.event :as event]
   [net.bowmap.transport.connection :as connection]))

; Will be the client handler
(defn connection-handler [connection]
  (let [{::connection/keys! [close-fn send-packet receive-packet]} connection]
    (try
      (loop []
        (when-some [packet (receive-packet)]
          (let [{:keys [packets events]} (handle/interpret-packet (assoc packet ::connection/connection connection))]
            (run! send-packet packets)
            (run! perform! events))
          (recur)))
      (finally
        (when-let [uuid (close-fn)]
          (perform! {::event/id ::event/player-left
                     ::player/uuid uuid}))))))