mirror of
https://github.com/cyberarm/i-mic-fps.git
synced 2025-12-15 15:42:35 +00:00
More work on networking code
This commit is contained in:
@@ -47,6 +47,15 @@ module CyberarmEngine
|
|||||||
def update
|
def update
|
||||||
while read
|
while read
|
||||||
end
|
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
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ module CyberarmEngine
|
|||||||
)
|
)
|
||||||
@hostname = hostname
|
@hostname = hostname
|
||||||
@port = port
|
@port = port
|
||||||
@max_clients = max_clients
|
@max_clients = max_clients + 2
|
||||||
|
|
||||||
@channels = Array(0..channels).map { |id| Channel.new(id: id, mode: :default) }
|
@channels = Array(0..channels).map { |id| Channel.new(id: id, mode: :default) }
|
||||||
@peers = []
|
@peers = []
|
||||||
@@ -124,8 +124,8 @@ module CyberarmEngine
|
|||||||
# !--- this following functions are meant for internal use only ---! #
|
# !--- this following functions are meant for internal use only ---! #
|
||||||
|
|
||||||
def available_peer_id
|
def available_peer_id
|
||||||
peer_ids = @peers.map { ||peer| peer.id }
|
peer_ids = @peers.map(&:id)
|
||||||
ids = (1..@max_clients).to_a - peer_ids
|
ids = (2..@max_clients).to_a - peer_ids
|
||||||
|
|
||||||
ids.size.positive? ? ids.first : nil
|
ids.size.positive? ? ids.first : nil
|
||||||
end
|
end
|
||||||
@@ -138,7 +138,6 @@ module CyberarmEngine
|
|||||||
pkt = PacketHandler.handle(host: self, raw: data, peer: peer)
|
pkt = PacketHandler.handle(host: self, raw: data, peer: peer)
|
||||||
packet_received(peer: peer, message: pkt.message, channel: 0) if pkt.is_a?(RawPacket)
|
packet_received(peer: peer, message: pkt.message, channel: 0) if pkt.is_a?(RawPacket)
|
||||||
else
|
else
|
||||||
# TODO: Reject packet unless it's a connection request
|
|
||||||
peer = Peer.new(id: 0, hostname: addr[2], port: addr[1])
|
peer = Peer.new(id: 0, hostname: addr[2], port: addr[1])
|
||||||
pkt = PacketHandler.handle(host: self, raw: data, peer: peer)
|
pkt = PacketHandler.handle(host: self, raw: data, peer: peer)
|
||||||
|
|
||||||
@@ -158,6 +157,10 @@ module CyberarmEngine
|
|||||||
@total_data_received += data.length
|
@total_data_received += data.length
|
||||||
@last_read_time = Networking.milliseconds
|
@last_read_time = Networking.milliseconds
|
||||||
|
|
||||||
|
peer.total_packets_received += 1
|
||||||
|
peer.total_data_received += data.length
|
||||||
|
peer.last_read_time = Networking.milliseconds
|
||||||
|
|
||||||
true
|
true
|
||||||
rescue IO::WaitReadable
|
rescue IO::WaitReadable
|
||||||
false
|
false
|
||||||
|
|||||||
Reference in New Issue
Block a user