32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
# File 'lib/web/pushserver.rb', line 32
def run
@server = WebSocketServer.new({
accepted_domains: @accepted_domains,
port: @port,
host: @host
})
Thread.new do
@server.run do |ws|
begin
ws.handshake
que = Queue.new
@connections.push(que)
@history.compact.each do |message|
ws.send(JSON.generate(echo: message))
end
thread = Thread.new do
while true
data = que.pop
ws.send(data)
end
end
while data = ws.receive
begin
JSON.parse(data).each do |name, value|
trigger(name, value, ws)
end
rescue JSON::ParserError => e
ws.send(JSON.generate(echo: e.message))
end
end
rescue Errno::ECONNRESET => e
ensure
@connections.delete(que)
thread.terminate if thread
end
end
end
end
|