From acb82c92a8b014c01588fa68e79ff1f0d6db722f Mon Sep 17 00:00:00 2001 From: ashmaroli Date: Fri, 15 Dec 2017 02:13:18 +0530 Subject: [PATCH] Cleanup LiveReloadReactor (#6607) Merge pull request 6607 --- .../commands/serve/live_reload_reactor.rb | 66 ++++++------------- 1 file changed, 20 insertions(+), 46 deletions(-) diff --git a/lib/jekyll/commands/serve/live_reload_reactor.rb b/lib/jekyll/commands/serve/live_reload_reactor.rb index 498e78ae..e9261f4f 100644 --- a/lib/jekyll/commands/serve/live_reload_reactor.rb +++ b/lib/jekyll/commands/serve/live_reload_reactor.rb @@ -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