|
@@ -0,0 +1,34 @@
|
|
|
|
+(ns bombnet.server
|
|
|
|
+ (:require [com.stuartsierra.component :as component]
|
|
|
|
+ [compojure.core :refer :all]
|
|
|
|
+ [compojure.route :as route]
|
|
|
|
+ [org.httpkit.server :refer :all]))
|
|
|
|
+
|
|
|
|
+(defroutes app
|
|
|
|
+ (GET "/" [] "Hello")
|
|
|
|
+ (GET "/ws" request
|
|
|
|
+ (with-channel request channel
|
|
|
|
+ (send! channel "Hello")
|
|
|
|
+ (on-close channel (fn [status] (println "channel closed: " status)))
|
|
|
|
+ (on-receive channel (fn [data] ;; echo it back
|
|
|
|
+ (send! channel data)))))
|
|
|
|
+ (route/not-found "Not Found"))
|
|
|
|
+
|
|
|
|
+(defrecord GameServer [server]
|
|
|
|
+ component/Lifecycle
|
|
|
|
+ (start [component]
|
|
|
|
+ (if server
|
|
|
|
+ component
|
|
|
|
+ (do
|
|
|
|
+ (println "Starting server")
|
|
|
|
+ (assoc component :server (run-server app {:port 8080})))))
|
|
|
|
+ (stop [component]
|
|
|
|
+ (if (not server)
|
|
|
|
+ component
|
|
|
|
+ (do
|
|
|
|
+ (println "Stopping server")
|
|
|
|
+ (server :timeout 100)
|
|
|
|
+ (assoc component :server nil)))))
|
|
|
|
+
|
|
|
|
+(defn new-server []
|
|
|
|
+ (map->GameServer {}))
|