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