Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wavejumper/40c4cbb21d67e4415e20685710b68ea0 to your computer and use it in GitHub Desktop.
Save wavejumper/40c4cbb21d67e4415e20685710b68ea0 to your computer and use it in GitHub Desktop.
Example of how to use Sente and Jetty 9 via `ring-jetty9-adapter`
;; Example courtesy of @wavejumper
(ns sente-ring-jetty9-adapter-example
(:require [compojure.core :refer :all]
[compojure.route :as route]
[ring.middleware.defaults :as ring.defaults :refer [wrap-defaults]]
[ring.middleware.session.memory :as mem]
[ring.adapter.jetty9 :as jetty]
[taoensso.sente :as sente]
[taoensso.sente.server-adapters.jetty9 :as adapters.jetty9]))
(let [{:keys [ch-recv send-fn connected-uids
ajax-post-fn ajax-get-or-ws-handshake-fn]}
(sente/make-channel-socket! (adapters.jetty9/get-sch-adapter) {})]
(def ring-ajax-post ajax-post-fn)
(def ring-ajax-get-or-ws-handshake ajax-get-or-ws-handshake-fn)
(def ch-chsk ch-recv) ; ChannelSocket's receive channel
(def chsk-send! send-fn) ; ChannelSocket's send API fn
(def connected-uids connected-uids) ; Watchable, read-only atom
)
(def session-store
(mem/memory-store))
(def ws-defaults
(-> ring.defaults/site-defaults
(assoc-in [:session :store] session-store)
(assoc-in [:responses :content-types] false)
(assoc-in [:session :flash] false)))
(def site-defaults
(assoc-in ring.defaults/site-defaults [:session :store] session-store))
(defroutes app
(GET "/" []
(let [csrf-token (force ring.middleware.anti-forgery/*anti-forgery-token*)]
(format "<h1>%s</h1>" csrf-token)))
(POST "/chsk" req (ring-ajax-post req)
(route/not-found "<h1>Page not found</h1>")))
(def handler
(wrap-defaults app site-defaults))
(def server
(jetty/run-jetty handler {:port 3000
:join? false
:websockets {"/chsk" (wrap-defaults ring-ajax-get-or-ws-handshake ws-defaults)}
:allow-null-path-info true}))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment