parent
71e3bce63d
commit
acb82c92a8
|
@ -14,7 +14,6 @@ module Jekyll
|
|||
attr_reader :thread
|
||||
|
||||
def initialize
|
||||
@thread = nil
|
||||
@websockets = []
|
||||
@connections_count = 0
|
||||
@started_event = Utils::ThreadEvent.new
|
||||
|
@ -25,7 +24,7 @@ module Jekyll
|
|||
# There is only one EventMachine instance per Ruby process so stopping
|
||||
# it here will stop the reactor thread we have running.
|
||||
EM.stop if EM.reactor_running?
|
||||
Jekyll.logger.debug("LiveReload Server:", "halted")
|
||||
Jekyll.logger.debug "LiveReload Server:", "halted"
|
||||
end
|
||||
|
||||
def running?
|
||||
|
@ -33,32 +32,18 @@ module Jekyll
|
|||
end
|
||||
|
||||
def handle_websockets_event(ws)
|
||||
ws.onopen do |handshake|
|
||||
connect(ws, handshake)
|
||||
end
|
||||
|
||||
ws.onclose do
|
||||
disconnect(ws)
|
||||
end
|
||||
|
||||
ws.onmessage do |msg|
|
||||
print_message(msg)
|
||||
end
|
||||
|
||||
ws.onerror do |error|
|
||||
log_error(error)
|
||||
end
|
||||
ws.onopen { |handshake| connect(ws, handshake) }
|
||||
ws.onclose { disconnect(ws) }
|
||||
ws.onmessage { |msg| print_message(msg) }
|
||||
ws.onerror { |error| log_error(error) }
|
||||
end
|
||||
|
||||
# rubocop:disable Metrics/MethodLength
|
||||
def start(opts)
|
||||
@thread = Thread.new do
|
||||
# Use epoll if the kernel supports it
|
||||
EM.epoll
|
||||
EM.run do
|
||||
EM.error_handler do |e|
|
||||
log_error(e)
|
||||
end
|
||||
EM.error_handler { |e| log_error(e) }
|
||||
|
||||
EM.start_server(
|
||||
opts["host"],
|
||||
|
@ -70,17 +55,11 @@ module Jekyll
|
|||
end
|
||||
|
||||
# Notify blocked threads that EventMachine has started or shutdown
|
||||
EM.schedule do
|
||||
@started_event.set
|
||||
end
|
||||
EM.schedule { @started_event.set }
|
||||
EM.add_shutdown_hook { @stopped_event.set }
|
||||
|
||||
EM.add_shutdown_hook do
|
||||
@stopped_event.set
|
||||
end
|
||||
|
||||
Jekyll.logger.info(
|
||||
"LiveReload address:", "#{opts["host"]}:#{opts["livereload_port"]}"
|
||||
)
|
||||
Jekyll.logger.info "LiveReload address:",
|
||||
"http://#{opts["host"]}:#{opts["livereload_port"]}"
|
||||
end
|
||||
end
|
||||
@thread.abort_on_exception = true
|
||||
|
@ -90,17 +69,15 @@ module Jekyll
|
|||
# http://feedback.livereload.com/knowledgebase/articles/86174-livereload-protocol
|
||||
def reload(pages)
|
||||
pages.each do |p|
|
||||
msg = {
|
||||
json_message = JSON.dump({
|
||||
:command => "reload",
|
||||
:path => p.url,
|
||||
:liveCSS => true,
|
||||
}
|
||||
})
|
||||
|
||||
Jekyll.logger.debug("LiveReload:", "Reloading #{p.url}")
|
||||
Jekyll.logger.debug(JSON.dump(msg))
|
||||
@websockets.each do |ws|
|
||||
ws.send(JSON.dump(msg))
|
||||
end
|
||||
Jekyll.logger.debug "LiveReload:", "Reloading #{p.url}"
|
||||
Jekyll.logger.debug "", json_message
|
||||
@websockets.each { |ws| ws.send(json_message) }
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -110,7 +87,7 @@ module Jekyll
|
|||
if @connections_count == 1
|
||||
message = "Browser connected"
|
||||
message += " over SSL/TLS" if handshake.secure?
|
||||
Jekyll.logger.info("LiveReload:", message)
|
||||
Jekyll.logger.info "LiveReload:", message
|
||||
end
|
||||
ws.send(
|
||||
JSON.dump(
|
||||
|
@ -134,18 +111,15 @@ module Jekyll
|
|||
# Not sure what the 'url' command even does in LiveReload. The spec is silent
|
||||
# on its purpose.
|
||||
if msg["command"] == "url"
|
||||
Jekyll.logger.info("LiveReload:", "Browser URL: #{msg["url"]}")
|
||||
Jekyll.logger.info "LiveReload:", "Browser URL: #{msg["url"]}"
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
def log_error(e)
|
||||
Jekyll.logger.warn(
|
||||
"LiveReload experienced an error. "\
|
||||
"Run with --verbose for more information."
|
||||
)
|
||||
Jekyll.logger.debug("LiveReload Error:", e.message)
|
||||
Jekyll.logger.debug("LiveReload Error:", e.backtrace.join("\n"))
|
||||
Jekyll.logger.error "LiveReload experienced an error. " \
|
||||
"Run with --trace for more information."
|
||||
raise e
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue