|
@@ -0,0 +1,52 @@
|
|
|
+require 'net/http'
|
|
|
+require 'json'
|
|
|
+require 'thread'
|
|
|
+
|
|
|
+pubsub_URL = 'http://pubsub.example.org:2069/'
|
|
|
+
|
|
|
+def do_stuff_with(event)
|
|
|
+ print("Got a pubsub event!:\n")
|
|
|
+ print(event, "\n")
|
|
|
+end
|
|
|
+
|
|
|
+def listen(url)
|
|
|
+ ps_thread = Thread.new do
|
|
|
+ begin
|
|
|
+ uri = URI.parse(url)
|
|
|
+ Net::HTTP.start(uri.host, uri.port, :use_ssl => url.match(/^https:/) ? true : false) do |http|
|
|
|
+ request = Net::HTTP::Get.new uri.request_uri
|
|
|
+ http.request request do |response|
|
|
|
+ body = ''
|
|
|
+ response.read_body do |chunk|
|
|
|
+ body += chunk
|
|
|
+ if chunk.end_with? "\n"
|
|
|
+ event = JSON.parse(body.chomp)
|
|
|
+ body = ''
|
|
|
+ if event['stillalive'] # pingback
|
|
|
+ print("ping? PONG!\n")
|
|
|
+ else
|
|
|
+ do_stuff_with(event)
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ end
|
|
|
+ rescue Errno::ECONNREFUSED => e
|
|
|
+ restartable = true
|
|
|
+ STDERR.puts e
|
|
|
+ sleep 3
|
|
|
+ rescue Exception => e
|
|
|
+ STDERR.puts e
|
|
|
+ STDERR.puts e.backtrace
|
|
|
+ end
|
|
|
+ end
|
|
|
+ return ps_thread
|
|
|
+end
|
|
|
+
|
|
|
+begin
|
|
|
+ ps_thread = listen(pubsub_URL)
|
|
|
+ print("Pubsub thread started, waiting for results...\n")
|
|
|
+ while ps_thread.alive?
|
|
|
+ sleep 10
|
|
|
+ end
|
|
|
+end
|