@@ -108,9 +108,10 @@ where
108
108
109
109
let ( sender, receiver) = unbounded ( ) ;
110
110
let fut = future:: try_join (
111
- Self :: io_loop ( reader, sender, req. clone ( ) ) ,
112
- req. clone ( ) . handle_rec ( handler, receiver)
113
- ) . map_ok ( |_| ( ) ) ;
111
+ req. clone ( ) . io_loop ( reader, sender) ,
112
+ req. clone ( ) . handler_loop ( handler, receiver)
113
+ )
114
+ . map_ok ( |_| ( ) ) ;
114
115
115
116
( req, fut)
116
117
}
@@ -131,14 +132,11 @@ where
131
132
let ( sender, receiver) = oneshot:: channel ( ) ;
132
133
133
134
let mut q = self . queue . lock ( ) . await ;
134
- //eprintln!("[Id {}]: Queue before push: {:#?}", msgid, q);
135
135
q. push ( ( msgid, sender) ) ;
136
- //eprintln!("[Id {}]: Queue after push: {:#?}", msgid, q);
137
136
138
137
let writer = self . writer . clone ( ) ;
139
138
model:: encode ( writer, req) . await ?;
140
139
141
- //eprintln!("[Id {}]: Receiver before return: {:#?}", msgid, receiver);
142
140
Ok ( receiver)
143
141
}
144
142
@@ -152,7 +150,6 @@ where
152
150
. await
153
151
. map_err ( |e| CallError :: SendError ( * e, method. to_string ( ) ) ) ?;
154
152
155
- //eprintln!("Receiver before await: {:#?}", receiver);
156
153
match receiver. await {
157
154
// Result<Result<Result<Value, Value>, Arc<DecodeError>>, RecvError>
158
155
Ok ( Ok ( r) ) => Ok ( r) , // r is Result<Value, Value>, i.e. we got an answer
@@ -194,7 +191,7 @@ where
194
191
}
195
192
}
196
193
197
- async fn handle_rec < H > (
194
+ async fn handler_loop < H > (
198
195
self ,
199
196
handler : H ,
200
197
mut receiver : UnboundedReceiver < RpcMessage > ,
@@ -203,54 +200,58 @@ where
203
200
H : Handler < Writer = W > + Spawner ,
204
201
{
205
202
loop {
206
- let msg = receiver. next ( ) . await . unwrap ( ) ;
207
-
208
- if let RpcMessage :: RpcRequest {
209
- msgid,
210
- method,
211
- params,
212
- } = msg
213
- {
214
- let handler_c = handler. clone ( ) ;
215
- let neovim = self . clone ( ) ;
216
- let writer = self . writer . clone ( ) ;
217
-
218
- handler. spawn ( async move {
219
- let response = match handler_c
220
- . handle_request ( method, params, neovim)
221
- . await
222
- {
223
- Ok ( result) => RpcMessage :: RpcResponse {
224
- msgid,
225
- result,
226
- error : Value :: Nil ,
227
- } ,
228
- Err ( error) => RpcMessage :: RpcResponse {
229
- msgid,
230
- result : Value :: Nil ,
231
- error,
232
- } ,
233
- } ;
234
-
235
- model:: encode ( writer, response)
236
- . await
237
- . unwrap_or_else ( |e| {
238
- error ! ( "Error sending response to request {}: '{}'" , msgid, e) ;
239
- } ) ;
240
- } ) ;
241
- } else if let RpcMessage :: RpcNotification { method, params } = msg {
242
- let neovim = self . clone ( ) ;
243
- handler. handle_notify ( method, params, neovim) . await ;
244
- } else {
245
- unreachable ! ( )
203
+ let msg = match receiver. next ( ) . await {
204
+ Some ( msg) => msg,
205
+ None => break Ok ( ( ) ) ,
206
+ } ;
207
+
208
+ match msg {
209
+ RpcMessage :: RpcRequest {
210
+ msgid,
211
+ method,
212
+ params,
213
+ } => {
214
+ let handler_c = handler. clone ( ) ;
215
+ let neovim = self . clone ( ) ;
216
+ let writer = self . writer . clone ( ) ;
217
+
218
+ handler. spawn ( async move {
219
+ let response = match handler_c
220
+ . handle_request ( method, params, neovim)
221
+ . await
222
+ {
223
+ Ok ( result) => RpcMessage :: RpcResponse {
224
+ msgid,
225
+ result,
226
+ error : Value :: Nil ,
227
+ } ,
228
+ Err ( error) => RpcMessage :: RpcResponse {
229
+ msgid,
230
+ result : Value :: Nil ,
231
+ error,
232
+ } ,
233
+ } ;
234
+
235
+ model:: encode ( writer, response)
236
+ . await
237
+ . unwrap_or_else ( |e| {
238
+ error ! ( "Error sending response to request {}: '{}'" , msgid, e) ;
239
+ } ) ;
240
+ } ) ;
241
+ } ,
242
+ RpcMessage :: RpcNotification {
243
+ method,
244
+ params
245
+ } => handler. handle_notify ( method, params, self . clone ( ) ) . await ,
246
+ _ => unreachable ! ( ) ,
246
247
}
247
248
}
248
249
}
249
250
250
251
async fn io_loop < R > (
252
+ self ,
251
253
mut reader : R ,
252
254
mut sender : UnboundedSender < RpcMessage > ,
253
- neovim : Neovim < W > ,
254
255
) -> Result < ( ) , Box < LoopError > >
255
256
where
256
257
R : AsyncRead + Send + Unpin + ' static ,
@@ -261,19 +262,14 @@ where
261
262
let msg = match model:: decode ( & mut reader, & mut rest) . await {
262
263
Ok ( msg) => msg,
263
264
Err ( err) => {
264
- let e = neovim . send_error_to_callers ( & neovim . queue , * err) . await ?;
265
+ let e = self . send_error_to_callers ( & self . queue , * err) . await ?;
265
266
return Err ( Box :: new ( LoopError :: DecodeError ( e, None ) ) ) ;
266
267
}
267
268
} ;
268
269
269
270
debug ! ( "Get message {:?}" , msg) ;
270
- if let RpcMessage :: RpcResponse {
271
- msgid,
272
- result,
273
- error,
274
- } = msg {
275
- let sender = find_sender ( & neovim. queue , msgid) . await ?;
276
- //eprintln!("Sender: {:?}", sender);
271
+ if let RpcMessage :: RpcResponse { msgid, result, error, } = msg {
272
+ let sender = find_sender ( & self . queue , msgid) . await ?;
277
273
if error == Value :: Nil {
278
274
sender
279
275
. send ( Ok ( Ok ( result) ) )
@@ -284,11 +280,10 @@ where
284
280
. map_err ( |r| ( msgid, r. expect ( "This was an OK(_)" ) ) ) ?;
285
281
}
286
282
} else if let Err ( e) = sender. send ( msg) . await {
287
- if e. is_disconnected ( ) {
288
- break Ok ( ( ) ) ;
289
- } else {
290
- panic ! ( "Unexpected error while sending incoming event to handler: {}" , e. to_string( ) ) ;
291
- }
283
+ panic ! (
284
+ "Unexpected error while sending incoming event to handler: {}" ,
285
+ e. to_string( )
286
+ ) ;
292
287
}
293
288
}
294
289
}
@@ -327,18 +322,14 @@ async fn find_sender(
327
322
queue : & Queue ,
328
323
msgid : u64 ,
329
324
) -> Result < oneshot:: Sender < ResponseResult > , Box < LoopError > > {
330
- //eprintln!("Looking for sender for id {}", msgid);
331
325
let mut queue = queue. lock ( ) . await ;
332
326
333
327
let pos = match queue. iter ( ) . position ( |req| req. 0 == msgid) {
334
328
Some ( p) => p,
335
329
None => return Err ( msgid. into ( ) ) ,
336
330
} ;
337
- //eprintln!( "Found sender at pos {}, queue length was {}", pos, queue.len());
338
331
339
- //eprintln!("[Id {}]: Queue before sender removal: {:#?}", msgid, queue);
340
332
let q = queue. remove ( pos) . 1 ;
341
- //eprintln!("[Id {}]: Queue after sender removal: {:#?}", msgid, queue);
342
333
Ok ( q)
343
334
}
344
335
0 commit comments