Sha256: 2ed0d77db5cff65f1c3d67852cb5232603b6a466e0b9a030ecff7d4791b6358f

Contents?: true

Size: 943 Bytes

Versions: 5

Compression:

Stored size: 943 Bytes

Contents

require 'faye/websocket'
require 'volt/server/socket_connection_handler'
require 'volt/server/websocket/rack_server_adaptor'


module Volt
  # Setup the dispatcher for the socket connection handler.
  # SocketConnectionHandler.dispatcher = Dispatcher.new

  class WebsocketHandler
    def initialize(app)
      # Setup the rack server and adaptor
      RackServerAdaptor.load

      @app = app
    end

    def call(env)
      if Faye::WebSocket.websocket?(env)
        ws = Faye::WebSocket.new(env)

        socket_connection_handler = SocketConnectionHandler.new(ws)

        ws.on :message do |event|
          socket_connection_handler.process_message(event.data)
        end

        ws.on :close do |event|
          socket_connection_handler.closed

          ws = nil
        end

        # Return async Rack response
        ws.rack_response
      else
        # Call down to the app
        @app.call(env)
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
volt-0.9.1 lib/volt/server/websocket/websocket_handler.rb
volt-0.9.1.pre5 lib/volt/server/websocket/websocket_handler.rb
volt-0.9.1.pre4 lib/volt/server/websocket/websocket_handler.rb
volt-0.9.1.pre3 lib/volt/server/websocket/websocket_handler.rb
volt-0.9.1.pre2 lib/volt/server/websocket/websocket_handler.rb