Class: Channel
Instance Method Summary
collapse
Methods included from Eventable
#on, #remove_listener, #trigger!
included
Constructor Details
Returns a new instance of Channel.
13
14
15
16
17
18
19
20
21
22
|
# File 'lib/volt/page/channel.rb', line 13
def initialize
@socket = nil
self.status = :opening
self.connected = false
self.error = nil
self.retry_count = 0
@queue = []
connect!
end
|
Instance Method Details
98
99
100
101
102
103
|
# File 'lib/volt/page/channel.rb', line 98
def close!
self.status = :closed
%x{
this.socket.close();
}
end
|
#closed(error) ⇒ Object
57
58
59
60
61
62
63
|
# File 'lib/volt/page/channel.rb', line 57
def closed(error)
self.status = :closed
self.connected = false
self.error = `error.reason`
reconnect!
end
|
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
# File 'lib/volt/page/channel.rb', line 28
def connect!
%x{
this.socket = new SockJS('/channel');
this.socket.onopen = function() {
self.$opened();
};
this.socket.onmessage = function(message) {
self['$message_received'](message.data);
};
this.socket.onclose = function(error) {
self.$closed(error);
};
}
end
|
24
25
26
|
# File 'lib/volt/page/channel.rb', line 24
def connected?
self.connected
end
|
#message_received(message) ⇒ Object
80
81
82
83
84
|
# File 'lib/volt/page/channel.rb', line 80
def message_received(message)
message = JSON.parse(message)
trigger!('message', *message)
end
|
46
47
48
49
50
51
52
53
54
55
|
# File 'lib/volt/page/channel.rb', line 46
def opened
old_status = @status
@status = :open
@connected = true
@reconnect_interval = nil
@retry_count = 0
@queue.each do |message|
send_message(message)
end
end
|
#reconnect! ⇒ Object
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
# File 'lib/volt/page/channel.rb', line 65
def reconnect!
self.status = :reconnecting
self.reconnect_interval ||= 0
self.reconnect_interval += (2000 + rand(5000))
self.retry_count += 1
interval = self.reconnect_interval
%x{
setTimeout(function() {
self['$connect!']();
}, interval);
}
end
|
#send_message(message) ⇒ Object
86
87
88
89
90
91
92
93
94
95
96
|
# File 'lib/volt/page/channel.rb', line 86
def send_message(message)
if self.status != :open
@queue << message
else
message = JSON.dump([message])
%x{
this.socket.send(message);
}
end
end
|