Class: ActionMCP::Server::BaseSessionStore
- Inherits:
-
Object
- Object
- ActionMCP::Server::BaseSessionStore
- Includes:
- SessionStore
- Defined in:
- lib/action_mcp/server/base_session_store.rb
Direct Known Subclasses
Instance Method Summary collapse
- #cleanup_expired_sessions(older_than: 24.hours.ago) ⇒ Object
- #clear_all ⇒ Object
- #create_session(session_id = nil, attributes = {}) ⇒ Object
- #delete_session(session_id) ⇒ Object
- #find_sessions(criteria = {}) ⇒ Object
-
#initialize ⇒ BaseSessionStore
constructor
A new instance of BaseSessionStore.
- #load_session(session_id) ⇒ Object
- #save_session(session) ⇒ Object
- #session_count ⇒ Object
- #session_exists?(session_id) ⇒ Boolean
Constructor Details
#initialize ⇒ BaseSessionStore
Returns a new instance of BaseSessionStore.
8 9 10 |
# File 'lib/action_mcp/server/base_session_store.rb', line 8 def initialize @sessions = Concurrent::Hash.new end |
Instance Method Details
#cleanup_expired_sessions(older_than: 24.hours.ago) ⇒ Object
71 72 73 74 75 |
# File 'lib/action_mcp/server/base_session_store.rb', line 71 def cleanup_expired_sessions(older_than: 24.hours.ago) expired_ids = @sessions.select { |_id, session| session.updated_at < older_than }.keys expired_ids.each { |id| @sessions.delete(id) } expired_ids.count end |
#clear_all ⇒ Object
77 78 79 |
# File 'lib/action_mcp/server/base_session_store.rb', line 77 def clear_all @sessions.clear end |
#create_session(session_id = nil, attributes = {}) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/action_mcp/server/base_session_store.rb', line 12 def create_session(session_id = nil, attributes = {}) session_id ||= SecureRandom.hex(6) session_data = { id: session_id, status: "pre_initialize", initialized: false, role: "server", messages_count: 0, sse_event_counter: 0, created_at: Time.current, updated_at: Time.current }.merge(attributes) session = BaseSession.new(session_data, self) if session.role == "server" session.server_info = { name: ActionMCP.configuration.name, version: ActionMCP.configuration.version } session.server_capabilities = ActionMCP.configuration.capabilities session.tool_registry = ActionMCP.configuration.filtered_tools.map(&:name) session.prompt_registry = ActionMCP.configuration.filtered_prompts.map(&:name) session.resource_registry = ActionMCP.configuration.filtered_resources.map(&:name) end @sessions[session_id] = session session end |
#delete_session(session_id) ⇒ Object
54 55 56 |
# File 'lib/action_mcp/server/base_session_store.rb', line 54 def delete_session(session_id) @sessions.delete(session_id) end |
#find_sessions(criteria = {}) ⇒ Object
62 63 64 65 66 67 68 69 |
# File 'lib/action_mcp/server/base_session_store.rb', line 62 def find_sessions(criteria = {}) sessions = @sessions.values sessions = sessions.select { |s| s.status == criteria[:status] } if criteria[:status] sessions = sessions.select { |s| s.role == criteria[:role] } if criteria[:role] sessions end |
#load_session(session_id) ⇒ Object
44 45 46 47 48 |
# File 'lib/action_mcp/server/base_session_store.rb', line 44 def load_session(session_id) session = @sessions[session_id] session&.instance_variable_set(:@new_record, false) session end |
#save_session(session) ⇒ Object
50 51 52 |
# File 'lib/action_mcp/server/base_session_store.rb', line 50 def save_session(session) @sessions[session.id] = session end |
#session_count ⇒ Object
81 82 83 |
# File 'lib/action_mcp/server/base_session_store.rb', line 81 def session_count @sessions.size end |
#session_exists?(session_id) ⇒ Boolean
58 59 60 |
# File 'lib/action_mcp/server/base_session_store.rb', line 58 def session_exists?(session_id) @sessions.key?(session_id) end |