mirror of
https://github.com/cyberarm/i-mic-fps.git
synced 2025-12-13 06:42:35 +00:00
More work on networking code
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user