lib/volt/page/channel.rb in volt-0.8.22.beta2 vs lib/volt/page/channel.rb in volt-0.8.22

- old
+ new

@@ -7,11 +7,11 @@ module Volt class Channel include ReactiveAccessors include Eventable - reactive_accessor :connected, :status, :error, :reconnect_interval, :retry_count + reactive_accessor :connected, :status, :error, :reconnect_interval, :retry_count, :reconnect_in def initialize @socket = nil self.status = :opening self.connected = false @@ -43,15 +43,14 @@ }; ` end def opened - old_status = @status - @status = :open - @connected = true - @reconnect_interval = nil - @retry_count = 0 + self.status = :open + self.connected = true + self.reconnect_interval = nil + self.retry_count = 0 @queue.each do |message| send_message(message) end end @@ -64,20 +63,18 @@ end def reconnect! self.status = :reconnecting self.reconnect_interval ||= 0 - self.reconnect_interval += (2000 + rand(5000)) + self.reconnect_interval += (1000 + rand(5000)) self.retry_count += 1 interval = self.reconnect_interval - ` - setTimeout(function() { - self['$connect!'](); - }, interval); - ` + self.reconnect_in = interval + + reconnect_tick end def message_received(message) message = JSON.parse(message) @@ -100,7 +97,23 @@ self.status = :closed ` this.socket.close(); ` end + + private + + def reconnect_tick + if reconnect_in >= 1000 + self.reconnect_in -= 1000 + ` + setTimeout(function() { + self['$reconnect_tick'](); + }, 1000); + ` + else + connect! + end + end + end end