Sha256: 6a886da738142d5bbbc4a97e056beb0a6187f45c5375ee5f4a6bd152aa58035a
Contents?: true
Size: 1002 Bytes
Versions: 27
Compression:
Stored size: 1002 Bytes
Contents
require 'faye/websocket' require 'volt/server/socket_connection_handler' # Load websocket options once at boot # The ENV['DYNO'] option lets it kick in automatically if we're on heroku. WEBSOCKET_OPTIONS = if !ENV['NO_WEBSOCKET_PING'] && (ENV['WEBSOCKET_PING_TIME'] || ENV['DYNO']) {ping: (ENV['WEBSOCKET_PING_TIME'] || 30).to_i} else {} end module Volt class WebsocketHandler def initialize(app) @app = app end def call(env) if Faye::WebSocket.websocket?(env) ws = Faye::WebSocket.new(env, nil, WEBSOCKET_OPTIONS) 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
27 entries across 27 versions & 1 rubygems