guard/guard-livereload

View on GitHub
lib/guard/livereload/websocket.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'eventmachine'
require 'em-websocket'
require 'guard/livereload/websocket/dispatcher'

module Guard
  class LiveReload
    class WebSocket < EventMachine::WebSocket::Connection
      def initialize(options)
        @dispatcher = Dispatcher.new(options)
        super
      end

      def dispatch(data)
        responses = @dispatcher.dispatch(data)

        responses.each do |type, payload|
          case type
          when :default
            super
          when :data
            send_data(payload)
          when :close_write
            close_connection_after_writing
          when :file
            path = payload
            stream_file_data(path).callback { close_connection_after_writing }
          else
            raise "Unknown response type: #{type.inspect}"
          end
        end
      end
    end
  end
end