12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152 |
- 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
|