class TerminalGameEngine::Network
Constants
- PORT
Attributes
logger[R]
Public Class Methods
new(logger: Logger.new('/dev/null'))
click to toggle source
# File lib/terminal_game_engine/network.rb, line 11 def initialize(logger: Logger.new('/dev/null')) @logger = logger end
Public Instance Methods
hostname()
click to toggle source
# File lib/terminal_game_engine/network.rb, line 48 def hostname @hostname ||= `hostname -s`.strip end
open_socket()
click to toggle source
# File lib/terminal_game_engine/network.rb, line 15 def open_socket @socket = UDPSocket.new @socket.bind '0.0.0.0', PORT @socket.setsockopt Socket::SOL_SOCKET, Socket::SO_REUSEADDR, true @socket.setsockopt Socket::SOL_SOCKET, Socket::SO_BROADCAST, true rescue Errno::EADDRINUSE $stderr.puts "Game is already running." exit 1 end
receive_updates(&block)
click to toggle source
# File lib/terminal_game_engine/network.rb, line 25 def receive_updates(&block) loop do begin data, addr = @socket.recvfrom_nonblock 8192 data = YAML.load(data) block.call(data) rescue Psych::SyntaxError => error logger.error error end end rescue Errno::EAGAIN end
send_update(data)
click to toggle source
# File lib/terminal_game_engine/network.rb, line 38 def send_update(data) data = data.merge(hostname: hostname) begin @socket.send data.to_yaml, 0, '255.255.255.255', PORT rescue Errno::EHOSTUNREACH, Errno::ENETUNREACH, Errno::EMSGSIZE, Errno::ENETDOWN => error logger.error error end end