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