Class: TCPSumac::Server
- Inherits:
-
Object
- Object
- TCPSumac::Server
- Defined in:
- lib/tcp_sumac/server.rb
Instance Method Summary collapse
- #accept ⇒ Object
- #close ⇒ Object
- #closed? ⇒ Boolean
-
#initialize(tcp_messenger_server, duck_types:, entry:, entry_class:, max_message_length:, workers:) ⇒ Server
constructor
A new instance of Server.
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 = @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
#accept ⇒ Object
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 |
#close ⇒ Object
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
48 49 50 |
# File 'lib/tcp_sumac/server.rb', line 48 def closed? @closed end |