class Neovim::EventLoop

@api private

Public Class Methods

child(argv) click to toggle source
# File lib/neovim/event_loop.rb, line 18
def self.child(argv)
  new Connection.child(argv)
end
new(connection) click to toggle source
# File lib/neovim/event_loop.rb, line 26
def initialize(connection)
  @running = false
  @shutdown = false
  @connection = connection
end
stdio() click to toggle source
# File lib/neovim/event_loop.rb, line 22
def self.stdio
  new Connection.stdio
end
tcp(host, port) click to toggle source
# File lib/neovim/event_loop.rb, line 10
def self.tcp(host, port)
  new Connection.tcp(host, port)
end
unix(path) click to toggle source
# File lib/neovim/event_loop.rb, line 14
def self.unix(path)
  new Connection.unix(path)
end

Public Instance Methods

notify(method, *args) click to toggle source
# File lib/neovim/event_loop.rb, line 66
def notify(method, *args)
  log(:debug) { {name: method, arguments: args} }
  write(:notification, method, args)
end
register_types(api, session) click to toggle source
# File lib/neovim/event_loop.rb, line 94
def register_types(api, session)
  api.types.each do |type, info|
    id = info.fetch("id")
    klass = Neovim.const_get(type)
    log(:debug) { {type: type, id: id} }

    @connection.register_type(id) do |index|
      klass.new(index, session, api)
    end
  end
end
request(request_id, method, *args) click to toggle source
# File lib/neovim/event_loop.rb, line 42
def request(request_id, method, *args)
  log(:debug) do
    {
      request_id: request_id,
      method: method,
      arguments: args
    }
  end

  write(:request, request_id, method, args)
end
respond(request_id, return_value, error) click to toggle source
# File lib/neovim/event_loop.rb, line 54
def respond(request_id, return_value, error)
  log(:debug) do
    {
      request_id: request_id,
      return_value: return_value,
      error: error
    }
  end

  write(:response, request_id, error, return_value)
end
run() { |read| ... } click to toggle source
# File lib/neovim/event_loop.rb, line 71
def run
  @running = true
  last_value = nil

  loop do
    break unless @running
    break if @shutdown

    begin
      last_value = yield(read)
    rescue EOFError, Errno::EPIPE => e
      log_exception(:debug, e, __method__)
      shutdown
    rescue => e
      log_exception(:error, e, __method__)
    end
  end

  last_value
ensure
  @connection.close if @shutdown
end
shutdown() click to toggle source
# File lib/neovim/event_loop.rb, line 36
def shutdown
  @running = false
  @shutdown = true
  @connection.close
end
stop() click to toggle source
# File lib/neovim/event_loop.rb, line 32
def stop
  @running = false
end

Private Instance Methods

read() click to toggle source
# File lib/neovim/event_loop.rb, line 108
def read
  array = @connection.flush.read
  Message.from_array(array)
end
write(type, *args) click to toggle source
# File lib/neovim/event_loop.rb, line 113
def write(type, *args)
  message = Message.public_send(type, *args)
  @connection.write(message.to_a)
end