def parse(data)
@reader.put(data.bytes.to_a)
buffer = true
while buffer
case @stage
when 0 then
buffer = @reader.read(1)
parse_opcode(buffer[0]) if buffer
when 1 then
buffer = @reader.read(1)
parse_length(buffer[0]) if buffer
when 2 then
buffer = @reader.read(@length_size)
parse_extended_length(buffer) if buffer
when 3 then
buffer = @reader.read(4)
if buffer
@mask = buffer
@stage = 4
end
when 4 then
buffer = @reader.read(@length)
if buffer
@payload = buffer
emit_frame
@stage = 0
end
end
end
nil
end