class DEBUGGER__::UI_CDP::WebSocketServer
def extract_data
def extract_data first_group = @sock.getbyte fin = first_group & 0b10000000 != 128 raise 'Unsupported' if fin opcode = first_group & 0b00001111 raise Detach if opcode == 8 raise "Unsupported: #{opcode}" unless opcode == 1 second_group = @sock.getbyte mask = second_group & 0b10000000 == 128 raise 'The client must mask all frames' unless mask payload_len = second_group & 0b01111111 # TODO: Support other payload_lengths if payload_len == 126 payload_len = @sock.gets(2).unpack('n*')[0] end masking_key = [] 4.times { masking_key << @sock.getbyte } unmasked = [] payload_len.times do |n| masked = @sock.getbyte unmasked << (masked ^ masking_key[n % 4]) end msg = unmasked.pack 'c*' show_protocol :>, msg JSON.parse msg end