class TCPSumac::Server
Public Class Methods
new(tcp_messenger_server, duck_types: , entry: , entry_class: , max_message_length: , workers: )
click to toggle source
# 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
Public Instance Methods
accept()
click to toggle source
# 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()
click to toggle source
# 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?()
click to toggle source
# File lib/tcp_sumac/server.rb, line 48 def closed? @closed end
Private Instance Methods
new_entry()
click to toggle source
# File lib/tcp_sumac/server.rb, line 54 def new_entry case when @entry && !@entry_class entry = @entry when !@entry && @entry_class entry = @entry_class.new else raise end entry end