Files
i-mic-rts/lib/networking/server.rb

51 lines
1.1 KiB
Ruby

class IMICRTS
class Networking
class Server
def initialize(director:, hostname:, port:, max_peers: 8)
@director = director
@hostname, @port = hostname, port
@max_peers = max_peers
@socket = TCPServer.new(hostname, port)
@clients = []
end
def update
new_client = @socket.accept_nonblock(exception: false)
if new_client != :wait_readable
handle_client(new_client)
end
@clients.each do |client|
client.update
end
end
def handle_client(client)
if @clients.size < @max_peers
@clients << Networking::Client.new(client)
else
client.write("\u00000128")
client.close
end
end
def broadcast(packet)
@clients.each do |client|
client.write(packet)
end
end
def write(client_id, packet)
client = @clients.find { |cl| cl.uid == client_id }
client.write(packet) if client
end
def stop
@socket.close if @socket
end
end
end
end