websocket-rails/websocket-rails

View on GitHub
lib/assets/javascripts/websocket_rails/abstract_connection.js.coffee

Summary

Maintainability
Test Coverage
###
 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 = []