INNER CODE UNIT · Ruby
send_packet
royshil/obs-backgroundremoval · scripts/ws_client.rb:33
def send_packet(payload)
mask_key = Random.bytes(4).unpack('C*')
bytes = payload.to_json.b
frame = case
when bytes.length < 126; [0x81, bytes.length | 0x80]
when bytes.length <= 0xFFFF; [0x81, 0xFE, [bytes.length].pack('n').unpack('C*')]
else; [0x81, 0xFF, [bytes.length].pack('Q>').unpack('C*')]
end
frame += mask_key + bytes.unpack('C*').each_with_index.map { |b, i| b ^ mask_key[i % 4] }
@socket.write(frame.flatten.pack('C*'))
end
def receive_packet
h = @socket.read(2)
return nil if h.nil?