Class: Jekyll::Livereload::Reactor

Inherits:
Object
  • Object
show all
Defined in:
lib/jekyll-livereload/websocket.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opts) ⇒ Reactor

Returns a new instance of Reactor.



83
84
85
86
87
88
89
# File 'lib/jekyll-livereload/websocket.rb', line 83

def initialize(opts)
  @opts = opts
  @thread = nil
  @websockets = []
  @connections_count = 0
  trap("INT") { stop }
end

Instance Attribute Details

#optsObject (readonly)

Returns the value of attribute opts.



81
82
83
# File 'lib/jekyll-livereload/websocket.rb', line 81

def opts
  @opts
end

#threadObject (readonly)

Returns the value of attribute thread.



80
81
82
# File 'lib/jekyll-livereload/websocket.rb', line 80

def thread
  @thread
end

Instance Method Details

#reloadObject



125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# File 'lib/jekyll-livereload/websocket.rb', line 125

def reload
  Livereload.pages.each do |p|
    msg = {
      :command => 'reload',
      :path => p.path,
      :liveCSS => true,
    }

    # TODO Add support for override URL?
    # See http://feedback.livereload.com/knowledgebase/articles/86220-preview-css-changes-against-a-live-site-then-uplo

    Jekyll.logger.debug("LiveReload:", "Reloading #{p.path}")
    @websockets.each do |ws|
      ws.send(JSON.dump(msg))
    end
  end
  Livereload.pages.clear
end

#running?Boolean

Returns:

  • (Boolean)


96
97
98
# File 'lib/jekyll-livereload/websocket.rb', line 96

def running?
  !@thread.nil? && @thread.alive?
end

#startObject



100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
# File 'lib/jekyll-livereload/websocket.rb', line 100

def start
  @thread = Thread.new do
    # Use epoll if the kernel supports it
    EM.epoll
    # TODO enable SSL
    EM.run do
      Jekyll.logger.info("LiveReload Server:", "#{@opts['host']}:#{@opts['reload_port']}")
      EM.start_server(@opts['host'], @opts['reload_port'], HttpAwareConnection, @opts) do |ws|
        ws.onopen do |handshake|
          connect(ws, handshake)
        end

        ws.onclose do
          disconnect(ws)
        end

        ws.onmessage do |msg|
          print_message(msg)
        end
      end
    end
  end
end

#stopObject



91
92
93
94
# File 'lib/jekyll-livereload/websocket.rb', line 91

def stop
  @thread.kill unless @thread.nil?
  Jekyll.logger.debug("LiveReload Server:", "halted")
end