Kaynağa Gözat

Add Ruby client example

Daniel Gruno 4 yıl önce
ebeveyn
işleme
37067efc46
1 değiştirilmiş dosya ile 52 ekleme ve 0 silme
  1. 52 0
      clients/ruby/client.rb

+ 52 - 0
clients/ruby/client.rb

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