class Listen::TCP::Broadcaster
Public Class Methods
new(host, port)
click to toggle source
Initializes a Celluloid::IO-powered TCP-broadcaster
@param [String] host to broadcast on @param [String] port to broadcast on
Note: Listens on all addresses when host is nil
# File lib/listen/tcp/broadcaster.rb, line 17 def initialize(host, port) @sockets = [] _log :debug, format('Broadcaster: tcp server listening on: %s:%s', host, port) @server = TCPServer.new(host, port) rescue _log :error, format('Broadcaster.initialize: %s:%s', $ERROR_INFO, $ERROR_POSITION * "\n") raise end
Public Instance Methods
_log(type, message)
click to toggle source
# File lib/listen/tcp/broadcaster.rb, line 66 def _log(type, message) Celluloid::Logger.send(type, message) end
_unicast(socket, payload)
click to toggle source
# File lib/listen/tcp/broadcaster.rb, line 70 def _unicast(socket, payload) socket.write(payload) true rescue IOError, Errno::ECONNRESET, Errno::EPIPE _log :debug, "Broadcaster failed: #{socket.inspect}" false end
broadcast(payload)
click to toggle source
Broadcasts given payload to all connected sockets
# File lib/listen/tcp/broadcaster.rb, line 44 def broadcast(payload) active_sockets = @sockets.select do |socket| _unicast(socket, payload) end @sockets.replace(active_sockets) end
finalize()
click to toggle source
Cleans up sockets and server
# File lib/listen/tcp/broadcaster.rb, line 34 def finalize @sockets.map(&:close) if @sockets @sockets = nil return unless @server @server.close @server = nil end
run()
click to toggle source
Continuously accept and handle incoming connections
# File lib/listen/tcp/broadcaster.rb, line 52 def run while (socket = @server.accept) @sockets << socket end rescue Celluloid::Task::TerminatedError _log :debug, "TCP adapter was terminated: #{$ERROR_INFO}" rescue _log :error, format('Broadcaster.run: %s:%s', $ERROR_INFO, $ERROR_POSITION * "\n") raise end private def _log(type, message) Celluloid::Logger.send(type, message) end def _unicast(socket, payload) socket.write(payload) true rescue IOError, Errno::ECONNRESET, Errno::EPIPE _log :debug, "Broadcaster failed: #{socket.inspect}" false end end
start()
click to toggle source
Asynchronously start accepting connections
# File lib/listen/tcp/broadcaster.rb, line 29 def start async.run end