diff --git a/lib/networking/connection.rb b/lib/networking/connection.rb index 07434f0..887d029 100644 --- a/lib/networking/connection.rb +++ b/lib/networking/connection.rb @@ -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 diff --git a/lib/networking/peer.rb b/lib/networking/peer.rb index 785b657..d0bca48 100644 --- a/lib/networking/peer.rb +++ b/lib/networking/peer.rb @@ -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 diff --git a/lib/networking/read_buffer.rb b/lib/networking/read_buffer.rb index 4e1d2b0..f79fc59 100644 --- a/lib/networking/read_buffer.rb +++ b/lib/networking/read_buffer.rb @@ -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 diff --git a/lib/networking/server.rb b/lib/networking/server.rb index 8e6323e..deed315 100644 --- a/lib/networking/server.rb +++ b/lib/networking/server.rb @@ -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