/src/clj/superchat/core.clj

https://gitlab.com/BenjaminVanRyseghem/superchat · Clojure · 75 lines · 66 code · 9 blank · 0 comment · 3 complexity · 2be04e9015b1714146220b8b72738505 MD5 · raw file

  1. (ns superchat.core
  2. (:require [net.thegeez.browserchannel :as browserchannel]
  3. [net.thegeez.jetty-async-adapter :as jetty]
  4. #_[net.thegeez.netty-adapter :as netty]
  5. [ring.middleware.resource :as resource]
  6. [ring.middleware.file-info :as file]))
  7. (defn handler [req]
  8. {:status 200
  9. :headers {"Content-Type" "text/plain"}
  10. :body "Hello World"})
  11. (def clients (atom #{}))
  12. (def dev-app
  13. (-> handler
  14. (resource/wrap-resource "dev")
  15. (resource/wrap-resource "public")
  16. file/wrap-file-info
  17. (browserchannel/wrap-browserchannel {:base "/channel"
  18. :on-session
  19. (fn [session-id req]
  20. (println "session " session-id "connected")
  21. (browserchannel/add-listener
  22. session-id
  23. :close
  24. (fn [reason]
  25. (println "session " session-id " disconnected: " reason)
  26. (swap! clients disj session-id)
  27. (doseq [client-id @clients]
  28. (browserchannel/send-map client-id {"msg" (str "client " session-id " disconnected " reason)}))))
  29. (browserchannel/add-listener
  30. session-id
  31. :map
  32. (fn [map]
  33. (println "session " session-id " sent " map)
  34. (doseq [client-id @clients]
  35. (browserchannel/send-map client-id map))))
  36. (swap! clients conj session-id)
  37. (doseq [client-id @clients]
  38. (browserchannel/send-map client-id {"msg" (str "client " session-id " connected")})))})))
  39. (defn -main [& args]
  40. (println "Using Jetty adapter")
  41. (jetty/run-jetty-async #'dev-app {:port (Integer.
  42. (or
  43. (System/getenv "PORT")
  44. 8080)) :join? false}))
  45. #_(defn -main [& args]
  46. (println "Using Netty adapter")
  47. (netty/run-netty #'dev-app {:port (Integer.
  48. (or
  49. (System/getenv "PORT")
  50. 8080)) :join? false}))
  51. (comment
  52. (def jetty-async-server (-main))
  53. (.stop jetty-async-server)
  54. (do
  55. (.stop jetty-async-server)
  56. (def jetty-async-server (-main))
  57. )
  58. )
  59. (comment
  60. (def netty-async-server (-main))
  61. (netty-async-server)
  62. (do
  63. (netty-async-server)
  64. (def netty-async-server (-main))
  65. )
  66. )