class WebsocketRails::ConnectionAdapters::Base
Attributes
data_store[R]
dispatcher[R]
env[R]
id[RW]
The ConnectionManager
will set the connection ID when the connection is opened.
pong[RW]
queue[R]
request[R]
Public Class Methods
accepts?(env)
click to toggle source
# File lib/websocket_rails/connection_adapters.rb, line 21 def self.accepts?(env) false end
inherited(adapter)
click to toggle source
# File lib/websocket_rails/connection_adapters.rb, line 25 def self.inherited(adapter) ConnectionAdapters.register adapter end
new(request, dispatcher)
click to toggle source
# File lib/websocket_rails/connection_adapters.rb, line 35 def initialize(request, dispatcher) @env = request.env.dup @request = request @dispatcher = dispatcher @connected = true @queue = EventQueue.new @data_store = DataStore::Connection.new(self) @delegate = WebsocketRails::DelegationController.new @delegate.instance_variable_set(:@_env, request.env) @delegate.instance_variable_set(:@_request, request) start_ping_timer end
Public Instance Methods
connected?()
click to toggle source
# File lib/websocket_rails/connection_adapters.rb, line 108 def connected? true & @connected end
controller_delegate()
click to toggle source
# File lib/websocket_rails/connection_adapters.rb, line 104 def controller_delegate @delegate end
enqueue(event)
click to toggle source
# File lib/websocket_rails/connection_adapters.rb, line 72 def enqueue(event) @queue << event end
flush()
click to toggle source
# File lib/websocket_rails/connection_adapters.rb, line 80 def flush message = [] @queue.flush do |event| message << event.as_json end send message.to_json end
inspect()
click to toggle source
# File lib/websocket_rails/connection_adapters.rb, line 112 def inspect "#<Connection::#{id}>" end
on_close(data=nil)
click to toggle source
# File lib/websocket_rails/connection_adapters.rb, line 60 def on_close(data=nil) @ping_timer.try(:cancel) dispatch Event.new_on_close( self, data ) close_connection end
on_error(data=nil)
click to toggle source
# File lib/websocket_rails/connection_adapters.rb, line 66 def on_error(data=nil) event = Event.new_on_error( self, data ) dispatch event on_close event.data end
on_message(encoded_data)
click to toggle source
# File lib/websocket_rails/connection_adapters.rb, line 55 def on_message(encoded_data) event = Event.new_from_json( encoded_data, self ) dispatch event end
on_open(data=nil)
click to toggle source
# File lib/websocket_rails/connection_adapters.rb, line 49 def on_open(data=nil) event = Event.new_on_open( self, data ) dispatch event trigger event end
ping_interval()
click to toggle source
# File lib/websocket_rails/connection_adapters.rb, line 139 def ping_interval @ping_interval ||= WebsocketRails.config.default_ping_interval end
ping_interval=(interval)
click to toggle source
# File lib/websocket_rails/connection_adapters.rb, line 143 def ping_interval=(interval) @ping_interval = interval.to_i @ping_timer.try(:cancel) start_ping_timer end
rack_response()
click to toggle source
# File lib/websocket_rails/connection_adapters.rb, line 100 def rack_response [ -1, {}, [] ] end
send(message)
click to toggle source
# File lib/websocket_rails/connection_adapters.rb, line 96 def send(message) raise NotImplementedError, "Override this method in the connection specific adapter class" end
send_message(event_name, data = {}, options = {})
click to toggle source
# File lib/websocket_rails/connection_adapters.rb, line 88 def send_message(event_name, data = {}, options = {}) options.merge! :user_id => user_identifier, :connection => self options[:data] = data event = Event.new(event_name, options) event.trigger end
to_s()
click to toggle source
# File lib/websocket_rails/connection_adapters.rb, line 116 def to_s inspect end
trigger(event)
click to toggle source
# File lib/websocket_rails/connection_adapters.rb, line 76 def trigger(event) send "[#{event.serialize}]" end
user()
click to toggle source
# File lib/websocket_rails/connection_adapters.rb, line 124 def user return unless user_connection? controller_delegate.current_user end
user_connection?()
click to toggle source
# File lib/websocket_rails/connection_adapters.rb, line 120 def user_connection? not user_identifier.nil? end
user_identifier()
click to toggle source
# File lib/websocket_rails/connection_adapters.rb, line 129 def user_identifier @user_identifier ||= begin identifier = WebsocketRails.config.user_identifier return unless current_user_responds_to?(identifier) controller_delegate.current_user.send(identifier) end end
Private Instance Methods
close_connection()
click to toggle source
# File lib/websocket_rails/connection_adapters.rb, line 159 def close_connection @data_store.destroy! @ping_timer.try(:cancel) dispatcher.connection_manager.close_connection self end
connection_manager()
click to toggle source
# File lib/websocket_rails/connection_adapters.rb, line 155 def connection_manager dispatcher.connection_manager end
current_user_responds_to?(identifier)
click to toggle source
# File lib/websocket_rails/connection_adapters.rb, line 165 def current_user_responds_to?(identifier) controller_delegate && controller_delegate.respond_to?(:current_user) && controller_delegate.current_user && controller_delegate.current_user.respond_to?(identifier) end
dispatch(event)
click to toggle source
# File lib/websocket_rails/connection_adapters.rb, line 151 def dispatch(event) dispatcher.dispatch event end
start_ping_timer()
click to toggle source
# File lib/websocket_rails/connection_adapters.rb, line 175 def start_ping_timer @pong = true # Set negative interval to nil to deactivate periodic pings if ping_interval > 0 @ping_timer = EM::PeriodicTimer.new(ping_interval) do if pong == true self.pong = false ping = Event.new_on_ping self trigger ping else @ping_timer.cancel on_error end end end end