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
|
@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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user