Class: ModelContextProtocol::Server::StdioTransport::RequestStore
- Inherits:
-
Object
- Object
- ModelContextProtocol::Server::StdioTransport::RequestStore
- Defined in:
- lib/model_context_protocol/server/stdio_transport/request_store.rb
Overview
Thread-safe in-memory storage for tracking active requests and their cancellation status. This store is used by StdioTransport to manage request lifecycle and handle cancellation.
Instance Method Summary collapse
-
#active_requests ⇒ Array<String>
Get all active request IDs.
-
#cancelled?(request_id) ⇒ Boolean
Check if a request has been cancelled.
-
#cleanup_old_requests(max_age_seconds = 300) ⇒ Array<String>
Clean up old requests (useful for preventing memory leaks).
-
#get_request(request_id) ⇒ Hash?
Get information about a specific request.
-
#initialize ⇒ RequestStore
constructor
A new instance of RequestStore.
-
#mark_cancelled(request_id) ⇒ Boolean
Mark a request as cancelled.
-
#register_request(request_id, thread = Thread.current) ⇒ void
Register a new request with its associated thread.
-
#unregister_request(request_id) ⇒ Hash?
Unregister a request (typically called when request completes).
Constructor Details
#initialize ⇒ RequestStore
Returns a new instance of RequestStore.
6 7 8 9 |
# File 'lib/model_context_protocol/server/stdio_transport/request_store.rb', line 6 def initialize @mutex = Mutex.new @requests = {} end |
Instance Method Details
#active_requests ⇒ Array<String>
Get all active request IDs
73 74 75 76 77 |
# File 'lib/model_context_protocol/server/stdio_transport/request_store.rb', line 73 def active_requests @mutex.synchronize do @requests.keys.dup end end |
#cancelled?(request_id) ⇒ Boolean
Check if a request has been cancelled
44 45 46 47 48 |
# File 'lib/model_context_protocol/server/stdio_transport/request_store.rb', line 44 def cancelled?(request_id) @mutex.synchronize do @requests[request_id]&.fetch(:cancelled, false) || false end end |
#cleanup_old_requests(max_age_seconds = 300) ⇒ Array<String>
Clean up old requests (useful for preventing memory leaks)
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'lib/model_context_protocol/server/stdio_transport/request_store.rb', line 83 def cleanup_old_requests(max_age_seconds = 300) cutoff_time = Time.now - max_age_seconds removed_ids = [] @mutex.synchronize do @requests.delete_if do |request_id, data| if data[:started_at] < cutoff_time removed_ids << request_id true else false end end end removed_ids end |
#get_request(request_id) ⇒ Hash?
Get information about a specific request
64 65 66 67 68 |
# File 'lib/model_context_protocol/server/stdio_transport/request_store.rb', line 64 def get_request(request_id) @mutex.synchronize do @requests[request_id]&.dup end end |
#mark_cancelled(request_id) ⇒ Boolean
Mark a request as cancelled
30 31 32 33 34 35 36 37 38 |
# File 'lib/model_context_protocol/server/stdio_transport/request_store.rb', line 30 def mark_cancelled(request_id) @mutex.synchronize do if (request = @requests[request_id]) request[:cancelled] = true return true end false end end |
#register_request(request_id, thread = Thread.current) ⇒ void
This method returns an undefined value.
Register a new request with its associated thread
16 17 18 19 20 21 22 23 24 |
# File 'lib/model_context_protocol/server/stdio_transport/request_store.rb', line 16 def register_request(request_id, thread = Thread.current) @mutex.synchronize do @requests[request_id] = { thread:, cancelled: false, started_at: Time.now } end end |
#unregister_request(request_id) ⇒ Hash?
Unregister a request (typically called when request completes)
54 55 56 57 58 |
# File 'lib/model_context_protocol/server/stdio_transport/request_store.rb', line 54 def unregister_request(request_id) @mutex.synchronize do @requests.delete(request_id) end end |