Moved application-specific code out from rack_socket to lib/eventbus.rb
[arvados.git] / services / api / app / middlewares / rack_socket.rb
index 779c67503046a0f49dac738685a5a5ba73e90fd0..f13316f416a190bca8e8bceb0c280e4be3af599e 100644 (file)
@@ -1,6 +1,5 @@
 require 'rack'
 require 'faye/websocket'
-require 'oj'
 require 'eventmachine'
 
 class RackSocket
@@ -38,8 +37,7 @@ class RackSocket
       }
     end
 
-    @channel = EventMachine::Channel.new
-    @bgthread = nil
+    @handler = @options[:handler].new
   end
 
   def call env
@@ -47,47 +45,7 @@ class RackSocket
     if request.path_info == @endpoint and Faye::WebSocket.websocket?(env)
       ws = Faye::WebSocket.new(env)
 
-      sub = @channel.subscribe do |msg|
-        puts "sending #{msg}"
-        ws.send({:message => "log"}.to_json)
-      end
-
-      ws.on :message do |event|
-        puts "got #{event.data}"
-        ws.send(event.data)
-      end
-
-      ws.on :close do |event|
-        p [:close, event.code, event.reason]
-        @channel.unsubscribe sub
-        ws = nil
-      end
-
-      unless @bgthread
-        @bgthread = true
-        Thread.new do
-          # from http://stackoverflow.com/questions/16405520/postgres-listen-notify-rails
-          ActiveRecord::Base.connection_pool.with_connection do |connection|
-            conn = connection.instance_variable_get(:@connection)
-            begin
-              conn.async_exec "LISTEN logs"
-              while true
-                conn.wait_for_notify do |channel, pid, payload|
-                  puts "Received a NOTIFY on channel #{channel}"
-                  puts "from PG backend #{pid}"
-                  puts "saying #{payload}"
-                  @channel.push true
-                end
-              end
-            ensure
-              # Don't want the connection to still be listening once we return
-              # it to the pool - could result in weird behavior for the next
-              # thread to check it out.
-              conn.async_exec "UNLISTEN *"
-            end
-          end
-        end
-      end
+      @handler.on_connect ws
 
       # Return async Rack response
       ws.rack_response
@@ -97,5 +55,3 @@ class RackSocket
   end
 
 end
-
-