Sha256: bcaa313372bbab2f552ab99f0ca57c2f30f1d661850b08be195925cc495cc62b

Contents?: true

Size: 1.72 KB

Versions: 2

Compression:

Stored size: 1.72 KB

Contents

#= require "moz_websocket"
#= require "vendor/jquery.json-2.2"
#= require "vendor/swfobject"
#= require "vendor/web_socket"
//= provide "../swf"

window.WEB_SOCKET_SWF_LOCATION = "<%= asset_path 'WebSocketMain.swf' %>"

class @AlondraClient
  constructor: (@server, @channels=[], @token = null, @retry = 10000) ->

    @channels = [@channels] unless @channels instanceof Array

    @url = "ws://#{@server}"
    @url += "?token=#{@token}" if @token

    @connect()

  subscribe: (channel) =>
    if @socket.readyState ==  0 # Socket is connecting
      @channels.push(channel)   # Schedule for later subscription
      return

    subscription =
      command: 'subscribe'
      channel: channel

    @socket.send $.toJSON(subscription)
    @

  opened: () =>
    if @reconnectInterval
      clearInterval(@reconnectInterval)
      @reconnectInterval = null

    @subscribe(channel) for channel in @channels
    $(this).trigger('connected')
    true

  connect: =>
    @socket = new WebSocket(@url)

    @socket.onopen = @opened

    @socket.onclose = () =>
      this.reconnect()
      $(this).trigger('disconnected')

    @socket.onmessage = (message) =>
      msg = $.parseJSON(message.data)
      if msg.event
        @process(msg)
      else
        @execute(msg)


    @socket.onerror = (error) =>
      @reconnect()
      $(this).trigger('error', error)

    @

  process: (serverEvent) ->
    eventName    = serverEvent.event
    resourceType = serverEvent.resource_type
    resource     = serverEvent.resource

    $(@).trigger("#{eventName}.#{resourceType}", resource)

  execute: (message) ->
    eval(message.message)

  reconnect: ->
    return if !@retry || @reconnectInterval

    @reconnectInterval = setInterval =>
      this.connect()
    ,@retry

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
alondra-0.1.1 app/assets/javascripts/alondra-client.js.coffee.erb
alondra-0.1.0 app/assets/javascripts/alondra-client.js.coffee.erb