1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
require "neovim/client"
require "neovim/event_loop"
require "neovim/logging"
require "neovim/remote_module/dsl"
require "neovim/session"
module Neovim
class RemoteModule
include Logging
def self.from_config_block(&block)
new(DSL::new(&block).handlers)
end
def initialize(handlers)
@handlers = handlers
end
def start
event_loop = EventLoop.stdio
session = Session.new(event_loop)
client = nil
session.run do |message|
case message
when Message::Request
begin
client ||= Client.from_event_loop(event_loop, session)
args = message.arguments.flatten(1)
@handlers[message.method_name].call(client, *args).tap do |rv|
session.respond(message.id, rv, nil) if message.sync?
end
rescue => e
log_exception(:error, e, __method__)
session.respond(message.id, nil, e.message) if message.sync?
end
end
end
end
end
end
|