Class: TCPSumac::Server

Inherits:
Object
  • Object
show all
Defined in:
lib/tcp_sumac/server.rb

Instance Method Summary collapse

Constructor Details

#initialize(tcp_messenger_server, duck_types:, entry:, entry_class:, max_message_length:, workers:) ⇒ Server

Returns a new instance of Server.



4
5
6
7
8
9
10
11
12
13
14
# File 'lib/tcp_sumac/server.rb', line 4

def initialize(tcp_messenger_server, duck_types: , entry: , entry_class: , max_message_length: , workers: )
  @tcp_messenger_server = tcp_messenger_server
  @duck_types = duck_types
  @entry = entry
  @entry_class = entry_class
  @max_message_length = max_message_length
  @workers = workers
  @close_mutex = QuackConcurrency::ReentrantMutex.new(duck_types: duck_types)
  @accept_mutex = QuackConcurrency::ReentrantMutex.new(duck_types: duck_types)
  @closed = false
end

Instance Method Details

#acceptObject



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/tcp_sumac/server.rb', line 16

def accept
  @accept_mutex.synchronize do
    raise ClosedError if closed?
    begin
      tcp_messenger = @tcp_messenger_server.accept
    rescue
      @close_mutex.synchronize do
        raise ClosedError if closed?
        close
        raise ConnectionError
      end
    end
    adapter = Adapter.new(tcp_messenger)
    
    return Sumac.new(duck_types: @duck_types, entry: new_entry, messenger: adapter, workers: @workers)
  end
end

#closeObject



34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/tcp_sumac/server.rb', line 34

def close
  @close_mutex.synchronize do
    raise ClosedError if closed?
    begin
      @tcp_messenger_server.close
    rescue
      raise ConnectionError
    ensure
      @closed = true
    end
  end
  nil
end

#closed?Boolean

Returns:

  • (Boolean)


48
49
50
# File 'lib/tcp_sumac/server.rb', line 48

def closed?
  @closed
end