Class: Takagi::Server::Udp
- Inherits:
-
Object
- Object
- Takagi::Server::Udp
- Defined in:
- lib/takagi/server/udp.rb
Overview
UDP server for handling CoAP messages
Instance Method Summary collapse
-
#initialize(port: 5683, worker_processes: 2, worker_threads: 2, middleware_stack: nil, router: nil, logger: nil, watcher: nil) ⇒ Udp
constructor
A new instance of Udp.
-
#run! ⇒ Object
Starts the server with multiple worker processes.
-
#shutdown! ⇒ Object
Gracefully shuts down all workers.
Constructor Details
#initialize(port: 5683, worker_processes: 2, worker_threads: 2, middleware_stack: nil, router: nil, logger: nil, watcher: nil) ⇒ Udp
Returns a new instance of Udp.
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/takagi/server/udp.rb', line 11 def initialize(port: 5683, worker_processes: 2, worker_threads: 2, middleware_stack: nil, router: nil, logger: nil, watcher: nil) @port = port @worker_processes = worker_processes @worker_threads = worker_threads @middleware_stack = middleware_stack || Takagi::MiddlewareStack.instance @router = router || Takagi::Router.instance @logger = logger || Takagi.logger @watcher = watcher || Takagi::Observer::Watcher.new(interval: 1) Initializer.run! @socket = UDPSocket.new @socket.bind('0.0.0.0', @port) Takagi::Network::UdpSender.instance.setup(socket: @socket) @sender = Takagi::Network::UdpSender.instance end |
Instance Method Details
#run! ⇒ Object
Starts the server with multiple worker processes
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/takagi/server/udp.rb', line 30 def run! Takagi::Hooks.emit(:server_starting, protocol: :udp, port: @port) log_boot_details spawn_workers Takagi::Observable::Registry.start_all @watcher.start # Set flag instead of calling shutdown! directly from trap context # This avoids "can't be called from trap context" errors with logger trap('INT') { @shutdown_requested = true } # Wait for workers with periodic checks for shutdown until @shutdown_called || @shutdown_requested sleep 0.1 end # Call shutdown if it was requested by signal shutdown! if @shutdown_requested end |
#shutdown! ⇒ Object
Gracefully shuts down all workers
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/takagi/server/udp.rb', line 51 def shutdown! return if @shutdown_called @shutdown_called = true @watcher.stop close_socket terminate_workers Takagi::Observable::Registry.stop_all # Join the server thread if it was spawned if defined?(@server_thread) && @server_thread&.alive? @server_thread.join(5) # Wait up to 5 seconds end exit(0) unless test_environment? Takagi::Hooks.emit(:server_stopped, protocol: :udp, port: @port) end |