def parse(buffer)
buffer.each_byte do |data|
case @stage
when 0 then
parse_leading_byte(data)
when 1 then
value = (data & 0x7F)
@length = value + 128 * @length
if @closing and @length.zero?
@socket.close(nil, nil, false)
elsif (0x80 & data) != 0x80
if @length.zero?
@socket.receive('')
@stage = 0
else
@buffer = []
@stage = 2
end
end
when 2 then
if data == 0xFF
@socket.receive(WebSocket.encode(@buffer))
@stage = 0
else
@buffer << data
if @length and @buffer.size == @length
@stage = 0
end
end
end
end
nil
end