class Domotics::Core::WsServer
Public Class Methods
new(args = {})
click to toggle source
# File lib/domotics/core/ws_server.rb, line 4 def initialize(args = {}) @logger = Domotics::Core::Setup.logger || Logger.new(STDERR) @args = args @@parent, @child = Socket.pair(:UNIX, :DGRAM, 0) end
publish(msg)
click to toggle source
# File lib/domotics/core/ws_server.rb, line 30 def self.publish(msg) @@parent.send msg, 0 if @@parent end
Public Instance Methods
run()
click to toggle source
# File lib/domotics/core/ws_server.rb, line 9 def run @logger.info { "[WebSocket] server [#{@args[:host]}:#{@args[:port]}]" } fork do @@parent.close channel = EventMachine::Channel.new Thread.new { loop { channel.push @child.recv(2**10) }} EventMachine::WebSocket.start(@args) do |ws| ws.onopen do sid = channel.subscribe { |msg| ws.send msg } @logger.info { "[WebSocket] client [#{sid}]" } ws.onmessage do |msg| @logger.info { "[WebSocket] message [#{msg}] from [#{sid}]" } end ws.onclose do channel.unsubscribe(sid) end end end end @child.close end