From b9c30ade8026038831fc704c3700e25dffb126ab Mon Sep 17 00:00:00 2001 From: cyberarm Date: Mon, 30 Nov 2020 20:09:26 -0600 Subject: [PATCH] More work on networking code --- lib/networking/backend/connection.rb | 9 +++++++++ lib/networking/backend/server.rb | 11 +++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/lib/networking/backend/connection.rb b/lib/networking/backend/connection.rb index 8e0c83d..56742e7 100644 --- a/lib/networking/backend/connection.rb +++ b/lib/networking/backend/connection.rb @@ -47,6 +47,15 @@ module CyberarmEngine def update while read end + + @peer.write_queue.reverse.each do |packet| + write(packet) + @peer.write_queue.delete(packet) + end + + if Networking.milliseconds - @last_write_time > Protocol::HEARTBEAT_INTERVAL + @peer.write_queue << PacketHandler.create_control_packet(peer: @peer, control_type: Protocol::CONTROL_HEARTBEAT) + end end private diff --git a/lib/networking/backend/server.rb b/lib/networking/backend/server.rb index 27f83df..2ec2511 100644 --- a/lib/networking/backend/server.rb +++ b/lib/networking/backend/server.rb @@ -14,7 +14,7 @@ module CyberarmEngine ) @hostname = hostname @port = port - @max_clients = max_clients + @max_clients = max_clients + 2 @channels = Array(0..channels).map { |id| Channel.new(id: id, mode: :default) } @peers = [] @@ -124,8 +124,8 @@ module CyberarmEngine # !--- this following functions are meant for internal use only ---! # def available_peer_id - peer_ids = @peers.map { ||peer| peer.id } - ids = (1..@max_clients).to_a - peer_ids + peer_ids = @peers.map(&:id) + ids = (2..@max_clients).to_a - peer_ids ids.size.positive? ? ids.first : nil end @@ -138,7 +138,6 @@ module CyberarmEngine pkt = PacketHandler.handle(host: self, raw: data, peer: peer) packet_received(peer: peer, message: pkt.message, channel: 0) if pkt.is_a?(RawPacket) else - # TODO: Reject packet unless it's a connection request peer = Peer.new(id: 0, hostname: addr[2], port: addr[1]) pkt = PacketHandler.handle(host: self, raw: data, peer: peer) @@ -158,6 +157,10 @@ module CyberarmEngine @total_data_received += data.length @last_read_time = Networking.milliseconds + peer.total_packets_received += 1 + peer.total_data_received += data.length + peer.last_read_time = Networking.milliseconds + true rescue IO::WaitReadable false