lib/volt/page/channel.rb in volt-0.6.5 vs lib/volt/page/channel.rb in volt-0.7.0
- old
+ new
@@ -3,32 +3,32 @@
require 'volt/reactive/events'
require 'json'
class Channel
include ReactiveTags
-
+
attr_reader :status, :error, :reconnect_interval
-
+
def initialize
@socket = nil
@status = :opening
@connected = false
@error = nil
@retry_count = 0
@queue = []
-
+
connect!
end
-
+
def connected?
@connected
end
-
+
def retry_count
@retry_count
end
-
+
def connect!
%x{
this.socket = new SockJS('/channel');
this.socket.onopen = function() {
@@ -36,64 +36,64 @@
};
this.socket.onmessage = function(message) {
self['$message_received'](message.data);
};
-
+
this.socket.onclose = function(error) {
self.$closed(error);
};
}
end
-
+
def opened
@status = :open
@connected = true
@reconnect_interval = nil
@retry_count = 0
@queue.each do |message|
send_message(message)
end
-
+
trigger!('open')
trigger!('changed')
end
def closed(error)
@status = :closed
@connected = false
@error = `error.reason`
-
+
trigger!('closed')
trigger!('changed')
-
+
reconnect!
end
-
+
def reconnect!
@status = :reconnecting
@reconnect_interval ||= 0
@reconnect_interval += (2000 + rand(5000))
@retry_count += 1
-
+
# Trigger changed for reconnect interval
trigger!('changed')
-
+
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!
end
def send_message(message)
if @status != :open
@@ -104,13 +104,13 @@
%x{
this.socket.send(message);
}
end
end
-
+
def close!
@status = :closed
%x{
this.socket.close();
}
end
-end
\ No newline at end of file
+end