0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-01-09 00:10:11 -05:00
penpot/backend/uxbox/impl/websocket.clj
2015-12-30 00:18:59 +02:00

62 lines
2.4 KiB
Clojure

(ns uxbox.impl.websocket
(:require [promissum.core :as p]
[catacumba.impl.context :as ctx]
[catacumba.impl.handlers :as hs])
(:import ratpack.handling.Handler
ratpack.handling.Context
ratpack.func.Action
ratpack.exec.ExecController
java.util.concurrent.ExecutorService
io.netty.buffer.ByteBuf
catacumba.impl.context.DefaultContext
catacumba.websocket.WebSocketHandler
catacumba.websocket.WebSocketMessage
catacumba.websocket.WebSockets
catacumba.websocket.WebSocket))
;; (defrecord WebSocketSession [context state handler wsholder]
;; WebSocketHandler
;; (^void onOpen [this ^WebSocket ws]
;; (vreset! wsholder ws)
;; (let [context (merge context {:state state :ws this})]
;; (handler :open context)))
;; (^void onMessage [_ ^WebSocketMessage msg ^Action callback]
;; (let [message (.getData msg)
;; context (merge context {:state state :ws this})]
;; (-> (handler :message (assoc context :message message))
;; (p/then (fn [_] (.execute callback nil)))
;; (p/catch (fn [e]
;; (letfn [(on-error [_]
;; (.execute callback nil)
;; (.close @wsholder 400 (str e))
;; (vreset! wsholder nil))]
;; (-> (handler :error (assoc context :error e))
;; (p/then on-error)
;; (p/catch on-error))))))))
;; (^void onClose [this]
;; (let [context {:state state :ws this}
;; on-close (fn [_] (vreset! wsholder nil))]
;; (-> (handler :close context)
;; (p/then on-close)
;; (p/catch on-close)))))
;; (defn send!
;; [ws data]
;; (assert (string? data) "data should be string")
;; (let [sock @(:wsholder ws)]
;; (.send sock data)))
;; (defn websocket
;; [^DefaultContext context handler]
;; (->> (WebSocketSession. context (atom {}) handler (volatile! nil))
;; (WebSockets/websocket ^Context (:catacumba/context context)))))
;; ;; (defmethod hs/adapter :uxbox/websocket
;; ;; [handler]
;; ;; (reify Handler
;; ;; (^void handle [_ ^Context ctx]
;; ;; (hs/hydrate-context ctx (fn [^DefaultContext context]
;; ;; (websocket context handler))))))