Skip to content

Instantly share code, notes, and snippets.

@dakrone
Created March 21, 2011 19:53
Show Gist options
  • Save dakrone/880086 to your computer and use it in GitHub Desktop.
Save dakrone/880086 to your computer and use it in GitHub Desktop.
;; extracted from src/subrosa/netty.clj
(defn upstream-stage [handler]
(reify ChannelUpstreamHandler
(handleUpstream [_ ctx evt]
(.sendUpstream ctx (or (handler evt) evt)))))
(defn downstream-stage [handler]
(reify ChannelDownstreamHandler
(handleDownstream [_ ctx evt]
(.sendDownstream ctx (or (handler evt) evt)))))
(defn message-stage [handler]
(upstream-stage
(fn [evt]
(when (instance? MessageEvent evt)
(handler evt)))))
(defn message-handler [evt]
(dispatch-message (.getMessage evt) (.getChannel evt))
evt)
(defn add-irc-codec! [pipeline channel-group]
(doto pipeline
(.addLast "upstream-error"
(upstream-stage (partial #'netty-error-handler "UPSTREAM")))
(.addLast "connect" (upstream-stage
(partial #'connect-handler channel-group pipeline)))
(.addLast "message" (message-stage #'message-handler))
(.addLast "disconnect" (upstream-stage #'disconnect-handler))
(.addLast "downstream-error"
(downstream-stage (partial #'netty-error-handler "DOWNSTREAM")))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment