7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
# File 'lib/cloud_powers/synapse/web_soc/soc_server.rb', line 7
def create_websoc_server(opts = {})
channel = opts[:channel] || EM::Channel.new
Thread.new do
EM.run do
WebSocket::EventMachine::Server.start(:host => opts[:host], :port => opts[:port]) do |ws|
sid = nil
open_callback = opts[:on_open] || Proc.new do
puts "Client connected"
sid = channel.subscribe { |msg| ws.send msg }
end
ws.onopen &open_callback
on_message_callback = opts[:on_message] || Proc.new do |msg, type|
@current_websocket_message = msg
end
ws.onmessage &on_message_callback
on_error_callback = opts[:on_error] || Proc.new do |error|
puts "Error occured: #{error}"
end
ws.onerror &on_error_callback
on_close_callback = opts[:on_close] || Proc.new do
puts "Client disconnected"
channel.unsubscribe(sid) unless channel.nil?
end
ws.onclose &on_close_callback
end
end
end
channel
end
|