lib/assets/javascripts/websocket_rails/abstract_connection.js.coffee
###
Abstract Interface for the WebSocketRails client.
###
class WebSocketRails.AbstractConnection
constructor: (url, @dispatcher) ->
@message_queue = []
close: ->
trigger: (event) ->
if @dispatcher.state != 'connected'
@message_queue.push event
else
@send_event event
send_event: (event) ->
# Events queued before connecting do not have the correct
# connection_id set yet. We need to update it before dispatching.
event.connection_id = @connection_id if @connection_id?
# ...
on_close: (event) ->
if @dispatcher && @dispatcher._conn == @
close_event = new WebSocketRails.Event(['connection_closed', event])
@dispatcher.state = 'disconnected'
@dispatcher.dispatch close_event
on_error: (event) ->
if @dispatcher && @dispatcher._conn == @
error_event = new WebSocketRails.Event(['connection_error', event])
@dispatcher.state = 'disconnected'
@dispatcher.dispatch error_event
on_message: (event_data) ->
if @dispatcher && @dispatcher._conn == @
@dispatcher.new_message event_data
setConnectionId: (@connection_id) ->
flush_queue: ->
for event in @message_queue
@trigger event
@message_queue = []