Class: Neovim::Messager
- Includes:
- Logging
- Defined in:
- lib/neovim/messager.rb
Defined Under Namespace
Classes: Disconnected, Message, ResponseError
Constant Summary
Constants included from Logging
Logging::DEFAULT_LEVEL, Logging::LEVELS
Instance Method Summary collapse
-
#initialize(conn, session) ⇒ Messager
constructor
A new instance of Messager.
- #notify(method, *args) ⇒ Object
- #request(method, *args) ⇒ Object
- #run(until_id = nil) ⇒ Object
Methods included from Logging
Constructor Details
#initialize(conn, session) ⇒ Messager
Returns a new instance of Messager.
107 108 109 110 111 |
# File 'lib/neovim/messager.rb', line 107 def initialize conn, session @conn, @session = conn, session @request_id = 0 @responses = {} end |
Instance Method Details
#notify(method, *args) ⇒ Object
158 159 160 |
# File 'lib/neovim/messager.rb', line 158 def notify method, *args put Message::Notification[ method, args] end |
#request(method, *args) ⇒ Object
144 145 146 147 148 149 150 151 152 153 154 155 156 |
# File 'lib/neovim/messager.rb', line 144 def request method, *args @request_id += 1 put Message::Request[ @request_id, method, args] @responses[ @request_id] = nil run @request_id r = @responses.delete @request_id if r.error then t, e = *r.error t = @conn.error t raise ResponseError, "#{t}: #{e}" end r.value end |
#run(until_id = nil) ⇒ Object
113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
# File 'lib/neovim/messager.rb', line 113 def run until_id = nil loop do = get case when Message::Response then if @responses.key? .request_id then @responses[ .request_id] = else log :warning, "Dropped response", .request_id end when Message::Request then begin r = @session.execute_handler .method_name, .arguments log :debug1, "Request result", result: r rescue e = [ 0, $!.to_s] log_exception :error end rsp = Message::Response.new .request_id, e, r put rsp when Message::Notification then begin @session.execute_handler .method_name, .arguments rescue log_exception :error end end break if until_id and @responses[ until_id] end end |