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}))))))