MCPcopy Index your code
hub / github.com/ChrisFeldmeier/OpenCodeRust / send_request

Method send_request

crates/opencode-mcp/src/client.rs:357–402  ·  view source on GitHub ↗
(
        &self,
        method: &str,
        params: Option<serde_json::Value>,
    )

Source from the content-addressed store, hash-verified

355 self.request_id.fetch_add(1, Ordering::SeqCst) + 1
356 }
357 async fn send_request(
358 &self,
359 method: &str,
360 params: Option<serde_json::Value>,
361 ) -> Result<JsonRpcResponse, McpClientError> {
362 let id = self.next_id().await;
363 let request = JsonRpcRequest::new(id, method);
364 let request = if let Some(p) = params {
365 request.with_params(p)
366 } else {
367 request
368 };
369
370 // Send under the lock, then release it.
371 {
372 let guard = self.transport.lock().await;
373 let transport = guard.as_ref().ok_or(McpClientError::NotInitialized)?;
374 transport.send(&request).await?;
375 }
376
377 // Re-acquire for receive.
378 let guard = self.transport.lock().await;
379 let transport = guard.as_ref().ok_or(McpClientError::NotInitialized)?;
380
381 let response = loop {
382 match transport.receive().await? {
383 Some(JsonRpcMessage::Response(resp)) if resp.id == id => break resp,
384 Some(JsonRpcMessage::Notification(notif)) => {
385 self.handle_notification(notif).await;
386 continue;
387 }
388 Some(_) => continue,
389 None => {
390 return Err(McpClientError::TransportError(
391 "Connection closed".to_string(),
392 ));
393 }
394 }
395 };
396
397 if let Some(error) = response.error {
398 return Err(McpClientError::ServerError(error.message));
399 }
400
401 Ok(response)
402 }
403
404 async fn send_request_with_progress_timeout(
405 &self,

Callers 3

initializeMethod · 0.80
load_toolsMethod · 0.80
read_resourceMethod · 0.80

Calls 6

newFunction · 0.85
with_paramsMethod · 0.80
handle_notificationMethod · 0.80
next_idMethod · 0.45
sendMethod · 0.45
receiveMethod · 0.45

Tested by

no test coverage detected