Class: Whatsapp::SessionManager

Inherits:
Object
  • Object
show all
Defined in:
lib/whatsapp/session_manager.rb

Overview

Thread-safe registry for managing multiple WhatsApp sessions.

Each session is identified by a unique string name. The manager ensures that only one session exists per name and handles cleanup on removal.

Examples:

manager = Whatsapp::SessionManager.new
session = manager.session("hotel_42")
session.connect
manager.size           # => 1
manager.include?("hotel_42") # => true
manager.disconnect_all!

Instance Method Summary collapse

Constructor Details

#initializeSessionManager

Returns a new instance of SessionManager.



16
17
18
19
# File 'lib/whatsapp/session_manager.rb', line 16

def initialize
  @sessions = {}
  @mutex = Mutex.new
end

Instance Method Details

#disconnect_all!void

This method returns an undefined value.

Disconnect and remove all sessions.



55
56
57
58
59
60
# File 'lib/whatsapp/session_manager.rb', line 55

def disconnect_all!
  @mutex.synchronize do
    @sessions.each_value(&:disconnect)
    @sessions.clear
  end
end

#include?(name) ⇒ Boolean

Check if a session exists.

Parameters:

  • name (String, Symbol)

    session name

Returns:

  • (Boolean)


73
74
75
# File 'lib/whatsapp/session_manager.rb', line 73

def include?(name)
  @mutex.synchronize { @sessions.key?(name.to_s) }
end

#remove(name) ⇒ Session?

Remove and disconnect a session.

Parameters:

  • name (String, Symbol)

    session name

Returns:

  • (Session, nil)

    the removed session, or nil if not found



43
44
45
46
47
48
49
50
# File 'lib/whatsapp/session_manager.rb', line 43

def remove(name)
  name = name.to_s
  @mutex.synchronize do
    session = @sessions.delete(name)
    session&.disconnect
    session
  end
end

#session(name) ⇒ Session

Get or create a session by name.

Parameters:

  • name (String, Symbol)

    session name (converted to string)

Returns:

  • (Session)

    the session instance



25
26
27
28
29
30
# File 'lib/whatsapp/session_manager.rb', line 25

def session(name)
  name = name.to_s
  @mutex.synchronize do
    @sessions[name] ||= Session.new(name)
  end
end

#sessionsHash{String => Session}

All active sessions.

Returns:

  • (Hash{String => Session})

    copy of the sessions hash



35
36
37
# File 'lib/whatsapp/session_manager.rb', line 35

def sessions
  @mutex.synchronize { @sessions.dup }
end

#sizeInteger

Number of active sessions.

Returns:

  • (Integer)


65
66
67
# File 'lib/whatsapp/session_manager.rb', line 65

def size
  @mutex.synchronize { @sessions.size }
end