mirror of
https://github.com/cyberarm/i-mic-fps.git
synced 2025-12-15 15:42:35 +00:00
Packets can be sent/received now
This commit is contained in:
@@ -9,7 +9,7 @@ class IMICFPS
|
||||
|
||||
|
||||
@read_buffer = ReadBuffer.new
|
||||
@write_queue = []
|
||||
@packet_write_queue = []
|
||||
|
||||
@last_read_time = Networking.milliseconds
|
||||
@last_write_time = Networking.milliseconds
|
||||
@@ -37,6 +37,9 @@ class IMICFPS
|
||||
end
|
||||
|
||||
def send_packet( packet )
|
||||
Packet.splinter(packet).each do |pkt|
|
||||
@packet_write_queue << pkt
|
||||
end
|
||||
end
|
||||
|
||||
def update
|
||||
@@ -45,7 +48,10 @@ class IMICFPS
|
||||
|
||||
write
|
||||
|
||||
@read_buffer.reconstruct_packets.each do |packet|
|
||||
# puts "#{Networking.milliseconds} Total sent: #{@total_packets_sent} packets, #{@total_data_sent} data"
|
||||
# puts "#{Networking.milliseconds} Total received: #{@total_packets_received} packets, #{@total_data_received} data"
|
||||
@read_buffer.reconstruct_packets.each do |packet, addr_info|
|
||||
# @packet_write_queue.push( packet )
|
||||
end
|
||||
end
|
||||
|
||||
@@ -67,8 +73,11 @@ class IMICFPS
|
||||
end
|
||||
|
||||
def write
|
||||
while(packet = @write_queue.shift)
|
||||
@socket.send( packet.encode, 0, @address, @port )
|
||||
while(packet = @packet_write_queue.shift)
|
||||
@socket.send(packet.encode, 0, @address, @port)
|
||||
|
||||
@total_data_sent += packet.encode.length
|
||||
@total_packets_sent += 1
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
class IMICFPS
|
||||
module Networking
|
||||
class Peer
|
||||
attr_reader :packet_read_queue, :packet_write_queue
|
||||
attr_accessor :packets_sent, :packets_received, :data_sent, :data_received, :last_read_time, :last_write_time
|
||||
attr_reader :address, :port, :packet_read_queue, :packet_write_queue
|
||||
attr_accessor :total_packets_sent, :total_packets_received, :total_data_sent, :total_data_received, :last_read_time, :last_write_time
|
||||
def initialize(peer_id:, address:, port:)
|
||||
@address, @port = address, port
|
||||
@peer_id = peer_id
|
||||
@@ -13,10 +13,10 @@ class IMICFPS
|
||||
@last_read_time = Networking.milliseconds
|
||||
@last_write_time = Networking.milliseconds
|
||||
|
||||
@packets_sent = 0
|
||||
@packets_received = 0
|
||||
@data_sent = 0
|
||||
@data_received = 0
|
||||
@total_packets_sent = 0
|
||||
@total_packets_received = 0
|
||||
@total_data_sent = 0
|
||||
@total_data_received = 0
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -10,12 +10,14 @@ class IMICFPS
|
||||
end
|
||||
|
||||
def reconstruct_packets
|
||||
packets = []
|
||||
pairs = []
|
||||
|
||||
@buffer.each do |buffer, addr_info|
|
||||
@buffer.each do |hash|
|
||||
buffer, addr = hash[:buffer], hash[:addr_info]
|
||||
packet = Packet.from_stream(buffer)
|
||||
|
||||
if packet.valid?
|
||||
if true#packet.valid?
|
||||
pairs << [packet, addr]
|
||||
@buffer.delete(buffer)
|
||||
else
|
||||
puts "Invalid packet: #{packet}"
|
||||
@@ -23,7 +25,7 @@ class IMICFPS
|
||||
end
|
||||
end
|
||||
|
||||
return packets
|
||||
return pairs
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -31,6 +31,8 @@ class IMICFPS
|
||||
return new_peer
|
||||
end
|
||||
end
|
||||
|
||||
return nil
|
||||
end
|
||||
|
||||
def get_peer(peer_id)
|
||||
@@ -56,6 +58,8 @@ class IMICFPS
|
||||
|
||||
def broadcast_packet(packet)
|
||||
@peers.each do |peer|
|
||||
next unless peer
|
||||
|
||||
send_packet(peer.peer_id, packet)
|
||||
end
|
||||
end
|
||||
@@ -64,8 +68,25 @@ class IMICFPS
|
||||
while(read)
|
||||
end
|
||||
|
||||
@peers.each do |peer|
|
||||
next unless peer
|
||||
|
||||
peer.packet_write_queue.each do |packet|
|
||||
write(peer, packet)
|
||||
peer.packet_write_queue.delete(packet)
|
||||
end
|
||||
end
|
||||
|
||||
# "deliver" packets to peers, record stats to peers
|
||||
@read_buffer.reconstruct_packets.each do |packet|
|
||||
@read_buffer.reconstruct_packets.each do |packet, addr_info|
|
||||
peer = nil
|
||||
|
||||
# initial connection
|
||||
if packet.peer_id == 0
|
||||
peer = create_peer(address: addr_info[2], port: addr_info[1])
|
||||
else
|
||||
peer = get_peer(peer.peer_id)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
Reference in New Issue
Block a user