Module: Smash::CloudPowers::Synapse::WebSoc::SocServer

Included in:
Smash::CloudPowers::Synapse::WebSoc
Defined in:
lib/cloud_powers/synapse/web_soc/soc_server.rb

Instance Method Summary collapse

Instance Method Details

#broadcast_message(channel, msg) ⇒ Object



41
42
43
# File 'lib/cloud_powers/synapse/web_soc/soc_server.rb', line 41

def broadcast_message(channel, msg)
  channel.push msg
end

#create_websoc_server(opts = {}) ⇒ Object



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