class DEBUGGER__::UI_CDP::WebSocketClient

def send **msg

def send **msg
  msg = JSON.generate(msg)
  show_protocol :>, msg
  frame = Frame.new
  fin = 0b10000000
  opcode = 0b00000001
  frame.char fin + opcode
  mask = 0b10000000 # A client must mask all frames in a WebSocket Protocol.
  bytesize = msg.bytesize
  if bytesize < 126
    payload_len = bytesize
    frame.char mask + payload_len
  elsif bytesize < 2 ** 16
    payload_len = 0b01111110
    frame.char mask + payload_len
    frame.uint16 bytesize
  elsif bytesize < 2 ** 64
    payload_len = 0b01111111
    frame.char mask + payload_len
    frame.ulonglong bytesize
  else
    raise 'Bytesize is too big.'
  end
  masking_key = 4.times.map{
    key = rand(1..255)
    frame.char key
    key
  }
  msg.bytes.each_with_index do |b, i|
    frame.char(b ^ masking_key[i % 4])
  end
  @sock.print frame.b
end