-
-
Notifications
You must be signed in to change notification settings - Fork 48
/
async.clj
43 lines (41 loc) · 1.46 KB
/
async.clj
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
(ns ring.adapter.jetty9.handlers.async
(:require
[ring.adapter.jetty9.common :as common]
[ring.adapter.jetty9.websocket :as ws])
(:import [org.eclipse.jetty.server Request Response]
[org.eclipse.jetty.util Callback])
(:gen-class
:name ring.adapter.jetty9.handlers.AsyncProxyHandler
:extends org.eclipse.jetty.server.Handler$Abstract$NonBlocking
:state state
:init init
:constructors {[clojure.lang.IFn
clojure.lang.IPersistentMap] []}
:prefix "-"))
(defn -init
[ring-handler opts]
[[] [ring-handler opts]])
(defn -handle
"Asynchronous override for `Handler$Abstract$NonBlocking/handle"
[^ring.adapter.jetty9.handlers.AsyncProxyHandler this
^Request request
^Response response
^Callback callback]
(try
(let [[handler options] (.state this)
;;TODO: async timeout
;; async-timeout (:async-timeout options 30000)
]
(handler
(common/build-request-map request)
(fn [response-map]
(let [response-map (common/normalize-response response-map)]
(if (common/websocket-upgrade-response? response-map)
(ws/upgrade-websocket request response callback response-map)
(common/update-response request response response-map)))
(.succeeded callback))
(fn [^Throwable exception]
(Response/writeError request response callback exception)
(.failed callback exception))))
(finally
true)))