pass incoming browserchannel message request maps to listeners
This commit is contained in:
parent
ff20442d0f
commit
ce554b8f63
|
@ -1,10 +1,10 @@
|
||||||
(defproject net.thegeez/clj-browserchannel-jetty-adapter "0.0.5"
|
(defproject net.thegeez/clj-browserchannel-jetty-adapter "0.0.6"
|
||||||
:description "Jetty async adapter for BrowserChannel"
|
:description "Jetty async adapter for BrowserChannel"
|
||||||
:url ""
|
:url ""
|
||||||
:dependencies [[ring/ring-core "1.3.1"]
|
:dependencies [[ring/ring-core "1.3.1"]
|
||||||
[ring/ring-servlet "1.3.1"]
|
[ring/ring-servlet "1.3.1"]
|
||||||
[org.eclipse.jetty/jetty-server "8.1.16.v20140903"];; includes ssl
|
[org.eclipse.jetty/jetty-server "8.1.16.v20140903"];; includes ssl
|
||||||
[net.thegeez/clj-browserchannel-server "0.0.9"]]
|
[net.thegeez/clj-browserchannel-server "0.1.0"]]
|
||||||
:profiles {:provided
|
:profiles {:provided
|
||||||
{:dependencies
|
{:dependencies
|
||||||
[[org.clojure/clojure "1.6.0"]]}})
|
[[org.clojure/clojure "1.6.0"]]}})
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
(defproject net.thegeez/clj-browserchannel-server "0.0.9"
|
(defproject net.thegeez/clj-browserchannel-server "0.1.0"
|
||||||
:description "BrowserChannel server implementation in Clojure"
|
:description "BrowserChannel server implementation in Clojure"
|
||||||
:dependencies [[ring/ring-core "1.3.1"]
|
:dependencies [[ring/ring-core "1.3.1"]
|
||||||
[org.clojure/data.json "0.2.5"]]
|
[org.clojure/data.json "0.2.5"]]
|
||||||
|
|
|
@ -151,11 +151,11 @@
|
||||||
(send-off listeners-agent
|
(send-off listeners-agent
|
||||||
update-in [session-id event-key] #(conj (or % []) f)))
|
update-in [session-id event-key] #(conj (or % []) f)))
|
||||||
|
|
||||||
(defn notify-listeners [session-id event-key & data]
|
(defn notify-listeners [session-id request event-key & data]
|
||||||
(send-off listeners-agent
|
(send-off listeners-agent
|
||||||
(fn [listeners]
|
(fn [listeners]
|
||||||
(doseq [callback (get-in listeners [session-id event-key])]
|
(doseq [callback (get-in listeners [session-id event-key])]
|
||||||
(apply callback data))
|
(apply callback request data))
|
||||||
listeners)))
|
listeners)))
|
||||||
;; end of listeners
|
;; end of listeners
|
||||||
|
|
||||||
|
@ -316,7 +316,7 @@
|
||||||
|
|
||||||
;; after close this session cannot be reconnected to.
|
;; after close this session cannot be reconnected to.
|
||||||
;; removes session for sessions
|
;; removes session for sessions
|
||||||
(close [this message]))
|
(close [this request message]))
|
||||||
|
|
||||||
(defrecord BackChannel [;; respond wraps the continuation, which is
|
(defrecord BackChannel [;; respond wraps the continuation, which is
|
||||||
;; the actual connection of the backward
|
;; the actual connection of the backward
|
||||||
|
@ -417,7 +417,7 @@
|
||||||
(assoc :session-timeout
|
(assoc :session-timeout
|
||||||
(let [session-agent *agent*]
|
(let [session-agent *agent*]
|
||||||
(schedule (fn []
|
(schedule (fn []
|
||||||
(send-off session-agent close "Timed out"))
|
(send-off session-agent close nil "Timed out"))
|
||||||
(:session-timeout-interval details))))))
|
(:session-timeout-interval details))))))
|
||||||
(queue-string [this string]
|
(queue-string [this string]
|
||||||
(update-in this [:array-buffer] queue string))
|
(update-in this [:array-buffer] queue string))
|
||||||
|
@ -464,7 +464,7 @@
|
||||||
this ;; do nothing if buffer is empty
|
this ;; do nothing if buffer is empty
|
||||||
)))
|
)))
|
||||||
;; closes the session and removes it from sessions
|
;; closes the session and removes it from sessions
|
||||||
(close [this message]
|
(close [this request message]
|
||||||
|
|
||||||
(-> this
|
(-> this
|
||||||
clear-back-channel
|
clear-back-channel
|
||||||
|
@ -472,7 +472,7 @@
|
||||||
;; the heartbeat timeout is cancelled by clear-back-channel
|
;; the heartbeat timeout is cancelled by clear-back-channel
|
||||||
)
|
)
|
||||||
(swap! sessions dissoc id)
|
(swap! sessions dissoc id)
|
||||||
(notify-listeners id :close message)
|
(notify-listeners id request :close message)
|
||||||
nil ;; the agent will no longer wrap a session
|
nil ;; the agent will no longer wrap a session
|
||||||
))
|
))
|
||||||
|
|
||||||
|
@ -489,7 +489,7 @@
|
||||||
(send-off old-session-agent #(-> (if old-array-id
|
(send-off old-session-agent #(-> (if old-array-id
|
||||||
(acknowledge-arrays % old-array-id)
|
(acknowledge-arrays % old-array-id)
|
||||||
%)
|
%)
|
||||||
(close "Reconnected"))))
|
(close req "Reconnected"))))
|
||||||
(let [id (uuid)
|
(let [id (uuid)
|
||||||
details {:address (:remote-addr req)
|
details {:address (:remote-addr req)
|
||||||
:headers (:headers req)
|
:headers (:headers req)
|
||||||
|
@ -621,7 +621,7 @@
|
||||||
;; send as json for XHR and IE
|
;; send as json for XHR and IE
|
||||||
(do
|
(do
|
||||||
(doseq [map maps]
|
(doseq [map maps]
|
||||||
(notify-listeners (:id @session-agent) :map map))
|
(notify-listeners (:id @session-agent) req :map map))
|
||||||
(let [status (session-status @session-agent)]
|
(let [status (session-status @session-agent)]
|
||||||
{:status 200
|
{:status 200
|
||||||
:headers (:headers options)
|
:headers (:headers options)
|
||||||
|
@ -642,7 +642,7 @@
|
||||||
;; this is a request made in an img tag
|
;; this is a request made in an img tag
|
||||||
(do ;;end session
|
(do ;;end session
|
||||||
(when session-agent
|
(when session-agent
|
||||||
(send-off session-agent close "Disconnected"))
|
(send-off session-agent close req "Disconnected"))
|
||||||
{:status 200
|
{:status 200
|
||||||
:headers (:headers options)
|
:headers (:headers options)
|
||||||
:body ""}
|
:body ""}
|
||||||
|
|
Reference in a new issue