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