mirror of
https://github.com/cyberarm/i-mic-rts.git
synced 2025-12-15 15:52:34 +00:00
52 lines
1.3 KiB
Ruby
52 lines
1.3 KiB
Ruby
class IMICRTS
|
|
class Networking
|
|
class Client
|
|
attr_reader :packets_sent, :packets_received,
|
|
:data_sent, :data_received
|
|
def initialize(socket)
|
|
@socket = socket
|
|
|
|
@packets_sent, @packets_received = 0, 0
|
|
@data_sent, @data_received = 0, 0
|
|
|
|
@read_queue = []
|
|
@write_queue = []
|
|
end
|
|
|
|
def update
|
|
if connected?
|
|
buffer = @socket.recv_nonblock(Networking::Protocol.max_packet_length, exception: false)
|
|
|
|
if buffer.is_a?(String)
|
|
order = buffer.split(Protocol::END_OF_MESSAGE).first.strip
|
|
end
|
|
|
|
until(@write_queue.size == 0)
|
|
packet = @write_queue.shift
|
|
|
|
@socket.write_nonblock(packet + Protocol::END_OF_MESSAGE, exception: false)
|
|
end
|
|
end
|
|
end
|
|
|
|
def connected?
|
|
!@socket.closed?
|
|
end
|
|
|
|
def close(packet = nil)
|
|
@socket.write(Networking::Packet.pack(packet) + Protocol::END_OF_MESSAGE) if packet
|
|
|
|
@socket.close
|
|
end
|
|
|
|
def write(data)
|
|
packet = Networking::Packet.new(type: Protocol::RELIABLE, client_id: 0, data: data)
|
|
@write_queue << Networking::Packet.pack(packet)
|
|
end
|
|
|
|
def read
|
|
return @read_queue.shift
|
|
end
|
|
end
|
|
end
|
|
end |