30ddf0a
Branches > main > 30ddf0a > files / src / net / bowmap / core.clj
Idk man it's still bad
Commit: 30ddf0a3f7a6e95ae9cf62707760c43a5b7185c9
Parent: 9ccccc9
1 changed file:
src/net/bowmap/core.clj view file
@@ -51,42 +51,45 @@ packets that handling the serverbound packet it was given returned. Should only be used synchronously as serialization depends on client state!" [client msg]- (case (:type msg)- :server- (let [{:keys [client response]} (handle-packet client (:bytes msg))]- (reduce (fn [client pk]- (handle-message client {:type :client :pk pk}))- client response))+ (let [{:keys [stream val]} msg]+ (case stream+ :serverbound-packets+ (let [{:keys [client response]} (handle-packet client val)]+ (reduce (fn [client pk]+ (handle-message client {:stream :clientbound-packets :val pk}))+ client response)) - :client- (let [pk (cp/encode-packet (:pk msg) (::state/state client))]- @(s/put! (::stream client) pk)- client)))+ :clientbound-packets+ (let [pk (cp/encode-packet val (::state/state client))]+ @(s/put! (::stream client) pk)+ client))))++(defn feed+ "Sends all messages from the source to the sink with a transducer."+ [source xform sink]+ (let [stream (s/stream 1 xform)]+ (s/connect source stream)+ (s/connect stream sink {:upstream? false})))++(defn alt-onto+ "Takes a map of keywords to streams and returns a stream with vals {:stream keyword :val val-from-stream}."+ [chans]+ (let [out-stream (s/stream)]+ (doseq [[kw s] chans]+ (feed s+ (map (fn [x] {:stream kw :val x}))+ out-stream))+ out-stream)) (defn client-handler [stream _] (let [client-packet-stream (s/stream) client {::state/state ::state/handshaking ::stream stream- ::packet-stream client-packet-stream}- message-stream (s/stream)]-- (-> (s/transform- (comp- packet-framer-xf- (map (fn [buf] {:type :server- :bytes buf})))- stream)- (s/connect message-stream {:upstream? false}))-- (-> (s/transform- (map (fn [pk] {:type :client- :pk pk}))- client-packet-stream)- (s/connect message-stream {:upstream? false}))-- (d/catch (s/reduce #'handle-message client message-stream)- (fn [e]- (println "Exception in client packets:\n" e)))))+ ::packet-stream client-packet-stream}]+ (-> (s/reduce #'handle-message client (alt-onto {:serverbound-packets (s/transform packet-framer-xf stream)+ :clientbound-packets client-packet-stream}))+ (d/catch (fn [e]+ (println "Exception in client packets:\n" e)))))) (defn start-server [] (server/start-server! {:handler #'client-handler