lib/volt/page/channel.rb in volt-0.7.23 vs lib/volt/page/channel.rb in volt-0.8.0

- old
+ new

@@ -1,34 +1,32 @@ # The channel is the connection between the front end and the backend. -require 'volt/reactive/events' require 'json' +require 'volt/reactive/reactive_accessors' +require 'volt/reactive/eventable' class Channel - include ReactiveTags + include ReactiveAccessors + include Eventable - attr_reader :status, :error, :reconnect_interval + reactive_accessor :connected, :status, :error, :reconnect_interval, :retry_count def initialize @socket = nil - @status = :opening - @connected = false - @error = nil - @retry_count = 0 + self.status = :opening + self.connected = false + self.error = nil + self.retry_count = 0 @queue = [] connect! end def connected? - @connected + self.connected end - def retry_count - @retry_count - end - def connect! %x{ this.socket = new SockJS('/channel'); this.socket.onopen = function() { @@ -52,57 +50,43 @@ @reconnect_interval = nil @retry_count = 0 @queue.each do |message| send_message(message) end - - trigger!('open') - trigger!('changed') - if old_status == :reconnecting - trigger!('reconnected') - end end def closed(error) - @status = :closed - @connected = false - @error = `error.reason` + self.status = :closed + self.connected = false + self.error = `error.reason` - trigger!('closed') - trigger!('changed') - reconnect! end def reconnect! - @status = :reconnecting - @reconnect_interval ||= 0 - @reconnect_interval += (2000 + rand(5000)) - @retry_count += 1 + self.status = :reconnecting + self.reconnect_interval ||= 0 + self.reconnect_interval += (2000 + rand(5000)) + self.retry_count += 1 - # Trigger changed for reconnect interval - trigger!('changed') + interval = self.reconnect_interval - interval = @reconnect_interval - %x{ setTimeout(function() { self['$connect!'](); }, interval); } end def message_received(message) message = JSON.parse(message) - trigger!('message', nil, *message) - end - tag_method(:send_message) do - destructive! + trigger!('message', *message) end + def send_message(message) - if @status != :open + if self.status != :open @queue << message else # TODO: Temp: wrap message in an array, so we're sure its valid JSON message = JSON.dump([message]) %x{ @@ -110,10 +94,10 @@ } end end def close! - @status = :closed + self.status = :closed %x{ this.socket.close(); } end end