Sha256: d845b285b202fb840ca7e03c14665adb04475354a6263383aa9fcd5ebe5d2a7d

Contents?: true

Size: 1.7 KB

Versions: 5

Compression:

Stored size: 1.7 KB

Contents

###
 HTTP Interface for the WebSocketRails client.
###
class WebSocketRails.HttpConnection extends WebSocketRails.AbstractConnection
  connection_type: 'http'

  _httpFactories: -> [
    -> new XDomainRequest(),
    -> new XMLHttpRequest(),
    -> new ActiveXObject("Msxml2.XMLHTTP"),
    -> new ActiveXObject("Msxml3.XMLHTTP"),
    -> new ActiveXObject("Microsoft.XMLHTTP")
  ]

  constructor: (url, @dispatcher) ->
    super
    @_url          = "http://#{url}"
    @_conn         = @_createXMLHttpObject()
    @last_pos      = 0
    try
      @_conn.onreadystatechange = => @_parse_stream()
      @_conn.addEventListener("load", @on_close, false)
    catch e
      @_conn.onprogress = => @_parse_stream()
      @_conn.onload = @on_close
      # set this as 3 always for parse_stream as the object does not have this property at all
      @_conn.readyState = 3
    @_conn.open "GET", @_url, true
    @_conn.send()

  close: ->
    @_conn.abort()

  send_event: (event) ->
    super
    @_post_data event.serialize()

  _post_data: (payload) ->
    $.ajax @_url,
      type: 'POST'
      data:
        client_id: @connection_id
        data: payload
      success: ->

  _createXMLHttpObject: ->
    xmlhttp   = false
    factories = @_httpFactories()
    for factory in factories
      try
        xmlhttp = factory()
      catch e
        continue
      break
    xmlhttp

  _parse_stream: ->
    if @_conn.readyState == 3
      data         = @_conn.responseText.substring @last_pos
      @last_pos    = @_conn.responseText.length
      data = data.replace( /\]\]\[\[/g, "],[" )
      try
        event_data = JSON.parse data
        @on_message(event_data)
      catch e
        # just ignore if it cannot be parsed, probably whitespace

Version data entries

5 entries across 5 versions & 3 rubygems

Version Path
hkroger-websocket-rails-0.7.1 lib/assets/javascripts/websocket_rails/http_connection.js.coffee
wwl-websocket-rails-0.7.3 lib/assets/javascripts/websocket_rails/http_connection.js.coffee
wwl-websocket-rails-0.7.2 lib/assets/javascripts/websocket_rails/http_connection.js.coffee
wwl-websocket-rails-0.7.1 lib/assets/javascripts/websocket_rails/http_connection.js.coffee
websocket-rails-0.7.0 lib/assets/javascripts/websocket_rails/http_connection.js.coffee