server.clj
Branches > client-handling-rewrite > 67c4f1a > files / src / net / bowmap / network / server.clj
(ns net.bowmap.network.server
(:require
[aleph.tcp :as tcp]
[clojure.core.async :refer [chan]]
[manifold.stream :as s]
[net.bowmap.instance :as instance]
[net.bowmap.network.packet.frame :as frame])
(:import
[io.netty.bootstrap ServerBootstrap]
[io.netty.channel ChannelOption]))
(defn- handle-client [stream info]
(let [packets-in (chan 1 frame/packet-framer-xf)
packets-out (chan)
client (instance/client)]
(s/connect stream packets-in)
(s/connect packets-out stream)
(instance/connect! client packets-in packets-out)))
(defn start-server!
"Starts a Minecraft server at the port, passing clients into the instance."
[& {:keys [port]}]
(instance/start!
(tcp/start-server handle-client
{:port port
:bootstrap-transform #(ServerBootstrap/.childOption % ChannelOption/TCP_NODELAY true)})))