class Adsf::Live::WebSocketServer
Public Class Methods
new(host:, port:)
click to toggle source
# File lib/adsf/live/web_socket_server.rb, line 6 def initialize(host:, port:) @host = host @port = port @thread = start @sockets = [] @stopped_waiter = SizedQueue.new(1) end
Public Instance Methods
reload(paths)
click to toggle source
# File lib/adsf/live/web_socket_server.rb, line 21 def reload(paths) paths.each do |path| data = JSON.dump( command: 'reload', path: "#{Dir.pwd}#{path}", ) @sockets.each { |ws| ws.send(data) } end end
stop()
click to toggle source
# File lib/adsf/live/web_socket_server.rb, line 16 def stop EventMachine.stop @stopped_waiter.pop end
Private Instance Methods
on_socket_connected(socket)
click to toggle source
# File lib/adsf/live/web_socket_server.rb, line 61 def on_socket_connected(socket) socket.send( JSON.dump( command: 'hello', protocols: ['http://livereload.com/protocols/official-7'], serverName: 'nanoc-view', ), ) @sockets << socket end
on_socket_disconnected(socket)
click to toggle source
# File lib/adsf/live/web_socket_server.rb, line 73 def on_socket_disconnected(socket) @sockets.delete(socket) end
run(started_waiter)
click to toggle source
# File lib/adsf/live/web_socket_server.rb, line 50 def run(started_waiter) EventMachine.run do EventMachine.defer(-> { started_waiter << true }) EventMachine::WebSocket.run(host: @host, port: @port) do |socket| socket.onopen { on_socket_connected(socket) } socket.onclose { on_socket_disconnected(socket) } end end end
start()
click to toggle source
# File lib/adsf/live/web_socket_server.rb, line 35 def start started_waiter = SizedQueue.new(1) thread = Thread.new do Thread.current.abort_on_exception = true run(started_waiter) @stopped_waiter << true end started_waiter.pop thread end