class Brief::Server::Socket def self.start(options={}, &block) require 'em-websocket' unless defined?(EM::WebSocket) host = options.fetch(:host, '0.0.0.0') host = options.fetch(:port, '8023') gateway = Brief::Server::Gateway.new(options) socket = new(gateway: gateway) EM.run { socket.start } end attr_reader :gateway, :options, :host, :port def initialize(options={}) @options = options @gateway = gateway @host = options.fetch(:host, '0.0.0.0') @port = options.fetch(:port, 9099) end def log(message) if options[:log_to_console] puts(message) end end def start log "Starting socket gateway: #{port} host: #{ host }" EM::WebSocket.run(:host => host, :port => port) do |ws| ws.onopen do |handshake| log("== Brief client connected") log(handshake.inspect) end ws.onclose do log("brief Connection closed") end ws.onmessage do |data| message = OpenStruct.new(JSON.parse(data)) log "== Websocket Command: #{ message }" end end end end