Class: VectorMCP::Transport::HttpStream::SessionManager Private
- Inherits:
-
BaseSessionManager
- Object
- BaseSessionManager
- VectorMCP::Transport::HttpStream::SessionManager
- Defined in:
- lib/vector_mcp/transport/http_stream/session_manager.rb
Overview
This class is part of a private API. You should avoid using this class if possible, as it may be removed or be changed in the future.
Manages HTTP stream sessions with automatic cleanup and thread safety. Extends BaseSessionManager with HTTP streaming-specific functionality.
Handles:
-
Session creation and lifecycle management
-
Thread-safe session storage using concurrent-ruby
-
Automatic session cleanup based on timeout
-
Session context integration with VectorMCP::Session
-
HTTP streaming connection management
Defined Under Namespace
Classes: Session
Instance Attribute Summary
Attributes inherited from BaseSessionManager
#logger, #session_timeout, #transport
Instance Method Summary collapse
-
#create_minimal_session_context(session_id) ⇒ Object
private
Creates a minimal session context for each session (no caching to prevent contamination).
-
#create_session(session_id = nil, rack_env = nil) ⇒ Object
private
Optimized session creation with reduced object allocation and faster context creation.
-
#create_session_with_context(session_id, rack_env) ⇒ Object
private
Creates a VectorMCP::Session with proper request context from Rack environment.
-
#get_or_create_session(session_id = nil, rack_env = nil) ⇒ Object
private
Override to add rack_env support.
-
#remove_streaming_connection(session) ⇒ void
private
Removes streaming connection from a session.
-
#set_streaming_connection(session, connection) ⇒ void
private
Associates a streaming connection with a session.
-
#terminate_session(session_id) ⇒ Boolean
private
Terminates a session by ID.
Methods inherited from BaseSessionManager
#active_session_ids, #broadcast_message, #cleanup_all_sessions, #find_sessions, #get_session, #get_session_metadata, #initialize, #session_count, #session_metadata_updated?, #session_terminated?, #sessions?
Constructor Details
This class inherits a constructor from VectorMCP::Transport::BaseSessionManager
Instance Method Details
#create_minimal_session_context(session_id) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Creates a minimal session context for each session (no caching to prevent contamination)
107 108 109 110 111 |
# File 'lib/vector_mcp/transport/http_stream/session_manager.rb', line 107 def create_minimal_session_context(session_id) # Create a new minimal context for each session to prevent cross-session contamination minimal_context = VectorMCP::RequestContext.minimal("http_stream") VectorMCP::Session.new(@transport.server, @transport, id: session_id, request_context: minimal_context) end |
#create_session(session_id = nil, rack_env = nil) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Optimized session creation with reduced object allocation and faster context creation
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/vector_mcp/transport/http_stream/session_manager.rb', line 55 def create_session(session_id = nil, rack_env = nil) session_id ||= generate_session_id now = Time.now # Optimize session context creation - use cached minimal context when rack_env is nil session_context = if rack_env create_session_with_context(session_id, rack_env) else create_minimal_session_context(session_id) end # Pre-allocate metadata hash for better performance = { streaming_connection: nil } # Create internal session record with streaming connection metadata session = Session.new(session_id, session_context, now, now, ) @sessions[session_id] = session logger.info { "Session created: #{session_id}" } session end |
#create_session_with_context(session_id, rack_env) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Creates a VectorMCP::Session with proper request context from Rack environment
101 102 103 104 |
# File 'lib/vector_mcp/transport/http_stream/session_manager.rb', line 101 def create_session_with_context(session_id, rack_env) request_context = VectorMCP::RequestContext.from_rack_env(rack_env, "http_stream") VectorMCP::Session.new(@transport.server, @transport, id: session_id, request_context: request_context) end |
#get_or_create_session(session_id = nil, rack_env = nil) ⇒ Object
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Override to add rack_env support. Returns nil when a session_id is provided but not found (expired or unknown). Callers are responsible for returning 404 in that case.
81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/vector_mcp/transport/http_stream/session_manager.rb', line 81 def get_or_create_session(session_id = nil, rack_env = nil) if session_id session = get_session(session_id) if session # Update existing session context if rack_env is provided if rack_env request_context = VectorMCP::RequestContext.from_rack_env(rack_env, "http_stream") session.context.request_context = request_context end return session end # Session ID provided but not found — signal 404 to caller return nil end create_session(nil, rack_env) end |
#remove_streaming_connection(session) ⇒ void
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
This method returns an undefined value.
Removes streaming connection from a session.
143 144 145 146 147 |
# File 'lib/vector_mcp/transport/http_stream/session_manager.rb', line 143 def remove_streaming_connection(session) session.streaming_connection = nil session.touch! logger.debug { "Streaming connection removed: #{session.id}" } end |
#set_streaming_connection(session, connection) ⇒ void
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
This method returns an undefined value.
Associates a streaming connection with a session.
133 134 135 136 137 |
# File 'lib/vector_mcp/transport/http_stream/session_manager.rb', line 133 def set_streaming_connection(session, connection) session.streaming_connection = connection session.touch! logger.debug { "Streaming connection associated: #{session.id}" } end |
#terminate_session(session_id) ⇒ Boolean
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Terminates a session by ID.
rubocop:disable Naming/PredicateMethod
118 119 120 121 122 123 124 125 |
# File 'lib/vector_mcp/transport/http_stream/session_manager.rb', line 118 def terminate_session(session_id) session = @sessions.delete(session_id) return false unless session on_session_terminated(session) logger.info { "Session terminated: #{session_id}" } true end |