mirror of
https://github.com/cyberarm/i-mic-fps.git
synced 2025-12-15 23:52:35 +00:00
More work on implementing networking
This commit is contained in:
@@ -1,16 +1,75 @@
|
||||
class IMICFPS
|
||||
module Networking
|
||||
class Connection
|
||||
def initialize(hostname:, port:)
|
||||
attr_reader :address, :port
|
||||
attr_accessor :total_packets_sent, :total_packets_received, :total_data_sent, :total_data_received, :last_read_time, :last_write_time
|
||||
def initialize(address:, port:)
|
||||
@address = address
|
||||
@port = port
|
||||
|
||||
|
||||
@read_buffer = ReadBuffer.new
|
||||
@write_queue = []
|
||||
|
||||
@last_read_time = Networking.milliseconds
|
||||
@last_write_time = Networking.milliseconds
|
||||
|
||||
@total_packets_sent = 0
|
||||
@total_packets_received = 0
|
||||
@total_data_sent = 0
|
||||
@total_data_received = 0
|
||||
|
||||
@socket = nil
|
||||
end
|
||||
|
||||
def connect
|
||||
@socket = UDPSocket.new
|
||||
@socket.connect(@address, @port)
|
||||
|
||||
send_packet(
|
||||
Packet.new(
|
||||
peer_id: 0,
|
||||
sequence: 0,
|
||||
type: Protocol::CONNECT,
|
||||
payload: "Hello World!"
|
||||
)
|
||||
)
|
||||
end
|
||||
|
||||
def send_packet( packet )
|
||||
end
|
||||
|
||||
def update
|
||||
while(read)
|
||||
end
|
||||
|
||||
write
|
||||
|
||||
@read_buffer.reconstruct_packets.each do |packet|
|
||||
end
|
||||
end
|
||||
|
||||
def close
|
||||
@socket.close if @socket
|
||||
end
|
||||
|
||||
private
|
||||
def read
|
||||
data, addr = @socket.recvfrom_nonblock(Protocol::MAX_PACKET_SIZE)
|
||||
@read_buffer.add(data, addr )
|
||||
|
||||
@total_packets_received += 1
|
||||
@total_data_received += data.length
|
||||
@last_read_time = Networking.milliseconds
|
||||
return true
|
||||
rescue IO::WaitReadable
|
||||
return false
|
||||
end
|
||||
|
||||
def write
|
||||
while(packet = @write_queue.shift)
|
||||
@socket.send( packet.encode, 0, @address, @port )
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user