Skip to content

Instantly share code, notes, and snippets.

@rferraz
Created February 5, 2012 06:12
Show Gist options
  • Save rferraz/1743436 to your computer and use it in GitHub Desktop.
Save rferraz/1743436 to your computer and use it in GitHub Desktop.
Clojure CometD client example
(ns test.cometd-client
(:import (org.cometd.bayeux.client ClientSessionChannel$MessageListener)
(org.cometd.client BayeuxClient BayeuxClient$State)
(org.cometd.client.transport ClientTransport LongPollingTransport)
(org.eclipse.jetty.client HttpClient)))
(def channel-name "/my-channel")
(def client-url "http://localhost:8080/cometd")
(defn call-with [message]
(let [received-message (promise)
listener (proxy [ClientSessionChannel$MessageListener] []
(onMessage [channel message-map]
(deliver received-message (get (into {} message-map) "data"))))
http-client (HttpClient.)
http-transport (LongPollingTransport. nil http-client)
bayeux-client (BayeuxClient. client-url http-transport (make-array ClientTransport 0))]
(try
(do
(.start http-client)
(.. bayeux-client (getChannel channel-name) (addListener listener))
(.handshake bayeux-client)
(.waitFor bayeux-client 5000 BayeuxClient$State/CONNECTED (make-array BayeuxClient$State 0))
(.. bayeux-client (getChannel channel-name) (publish (java.util.HashMap. {"data" message})))
@received-message)
(finally
(.disconnect bayeux-client 1000)))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment