Packets can be sent/received now

This commit is contained in:
2020-05-10 20:30:22 -05:00
parent a0f8ce4bfb
commit 644c1916b2
4 changed files with 47 additions and 15 deletions

View File

@@ -9,7 +9,7 @@ class IMICFPS
@read_buffer = ReadBuffer.new @read_buffer = ReadBuffer.new
@write_queue = [] @packet_write_queue = []
@last_read_time = Networking.milliseconds @last_read_time = Networking.milliseconds
@last_write_time = Networking.milliseconds @last_write_time = Networking.milliseconds
@@ -37,6 +37,9 @@ class IMICFPS
end end
def send_packet( packet ) def send_packet( packet )
Packet.splinter(packet).each do |pkt|
@packet_write_queue << pkt
end
end end
def update def update
@@ -45,7 +48,10 @@ class IMICFPS
write 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
end end
@@ -67,8 +73,11 @@ class IMICFPS
end end
def write def write
while(packet = @write_queue.shift) while(packet = @packet_write_queue.shift)
@socket.send( packet.encode, 0, @address, @port ) @socket.send(packet.encode, 0, @address, @port)
@total_data_sent += packet.encode.length
@total_packets_sent += 1
end end
end end
end end

View File

@@ -1,8 +1,8 @@
class IMICFPS class IMICFPS
module Networking module Networking
class Peer class Peer
attr_reader :packet_read_queue, :packet_write_queue attr_reader :address, :port, :packet_read_queue, :packet_write_queue
attr_accessor :packets_sent, :packets_received, :data_sent, :data_received, :last_read_time, :last_write_time 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:) def initialize(peer_id:, address:, port:)
@address, @port = address, port @address, @port = address, port
@peer_id = peer_id @peer_id = peer_id
@@ -13,10 +13,10 @@ class IMICFPS
@last_read_time = Networking.milliseconds @last_read_time = Networking.milliseconds
@last_write_time = Networking.milliseconds @last_write_time = Networking.milliseconds
@packets_sent = 0 @total_packets_sent = 0
@packets_received = 0 @total_packets_received = 0
@data_sent = 0 @total_data_sent = 0
@data_received = 0 @total_data_received = 0
end end
end end
end end

View File

@@ -10,12 +10,14 @@ class IMICFPS
end end
def reconstruct_packets 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) packet = Packet.from_stream(buffer)
if packet.valid? if true#packet.valid?
pairs << [packet, addr]
@buffer.delete(buffer) @buffer.delete(buffer)
else else
puts "Invalid packet: #{packet}" puts "Invalid packet: #{packet}"
@@ -23,7 +25,7 @@ class IMICFPS
end end
end end
return packets return pairs
end end
end end
end end

View File

@@ -31,6 +31,8 @@ class IMICFPS
return new_peer return new_peer
end end
end end
return nil
end end
def get_peer(peer_id) def get_peer(peer_id)
@@ -56,6 +58,8 @@ class IMICFPS
def broadcast_packet(packet) def broadcast_packet(packet)
@peers.each do |peer| @peers.each do |peer|
next unless peer
send_packet(peer.peer_id, packet) send_packet(peer.peer_id, packet)
end end
end end
@@ -64,8 +68,25 @@ class IMICFPS
while(read) while(read)
end 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 # "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
end end