ba1da08
Branches > main > ba1da08 > files / src / net / bowmap / transport
Move server list ping out of server logic code
Commit: ba1da0840e136299d1dc70c862297bd5afab8958
Parent: 0dda787
4 changed files:
src/net/bowmap/protocol/handle.clj view file
@@ -10,6 +10,7 @@ [net.bowmap.protocol.registry :as reg] [net.bowmap.protocol.state :as state] [net.bowmap.server.gamemode :as gamemode]+ [net.bowmap.server.ping :as ping] [net.bowmap.server.player :as player] [net.bowmap.server.position :as position] [net.bowmap.server.server :as server]@@ -31,7 +32,16 @@ :protocol-id protocol)})) (defmethod interpret-packet ::serverbound/status-request [_ _]- {:events [{::event/id ::event/server-list-requested}]})+ (let [{::ping/keys! [player-count max-players motd]} (ping/ping-server)]+ {:packets [{::pk/id ::clientbound/status-response+ :response {:version {:name "26.2"+ :protocol 776}+ ; Gets the number of players playing, which is what you want+ ; And there are no side-effects!+ :players {:online player-count+ :max max-players}+ :description motd+ :enforcesSecureChat false}}]})) (defmethod interpret-packet ::serverbound/ping-request [_ pk] {:packets [{::pk/id ::clientbound/pong-responsesrc/net/bowmap/server/logic.clj view file
@@ -3,7 +3,6 @@ [net.bowmap.server.player :as player] [net.bowmap.server.position :as position] [net.bowmap.server.server :as server]- [net.bowmap.stormbow.effect :as effect] [net.bowmap.stormbow.event :as event])) (defmulti handle-event@@ -11,18 +10,6 @@ (fn [event] (::event/id event))) -(defmethod handle-event ::event/server-list-requested [_]- (dosync- [{::effect/id ::effect/send-server-list- :server-list-response {:version {:name "26.2"- :protocol 776}- ; Gets the number of players playing, which is what you want- ; And there are no side-effects!- :players {:online (count @server/players)- :max server/max-player-count}- :description {:text "Bowmap!"}- :enforcesSecureChat false}}]))- ; Want this to be pure, which means you need a way to encode that state change as data? (defmethod handle-event ::event/player-joined [{::player/keys! [player]}] (dosync@@ -34,9 +21,6 @@ (defmethod handle-event ::event/player-left [{:keys! [::player/uuid]}] (dosync- {::event/id ::event/playing- ::event/mode ::event/retract- ::player/uuid uuid} (commute server/players dissoc uuid) [])) src/net/bowmap/server/ping.clj view file
@@ -0,0 +1,9 @@+(ns net.bowmap.server.ping+ (:require+ [net.bowmap.server.server :as server]))++(defn ping-server []+ {::player-count (count @server/players)+ ::max-players server/max-player-count+ ; TODO eventually make this a component+ ::motd {:text "Bowmap!"}})src/net/bowmap/stormbow/effect_execution.clj view file
@@ -1,21 +1,10 @@ (ns net.bowmap.stormbow.effect-execution (:require- [clojure.core.async :refer [put!]]- [net.bowmap.protocol.client :as client]- [net.bowmap.protocol.packet :as pk]- [net.bowmap.protocol.packet.clientbound :as clientbound] [net.bowmap.stormbow.effect :as effect])) (defmulti execute-effect! (fn [effect] (::effect/id effect))) -(defmethod execute-effect! ::effect/send-server-list [effect]- (let [{:keys! [::client/client server-list-response]} effect- {::client/keys! [clientbound-packets]} client- packet {::pk/id ::clientbound/status-response- :response server-list-response}]- (put! clientbound-packets packet)))- (defn execute-effects! [effects] (run! execute-effect! effects))