def receive_data data
return unless (data and data.length > 0)
@lt2_mode ||= :lines
@lt2_delimiter ||= "\n"
@lt2_linebuffer ||= []
if @lt2_mode == :lines
if ix = data.index( @lt2_delimiter )
@lt2_linebuffer << data[0...ix]
ln = @lt2_linebuffer.join
@lt2_linebuffer.clear
if @lt2_delimiter == "\n"
ln.chomp!
end
receive_line ln
receive_data data[(ix+@lt2_delimiter.length)..-1]
else
@lt2_linebuffer << data
end
elsif @lt2_mode == :text
if @lt2_textsize
needed = @lt2_textsize - @lt2_textpos
will_take = if data.length > needed
needed
else
data.length
end
@lt2_textbuffer << data[0...will_take]
tail = data[will_take..-1]
@lt2_textpos += will_take
if @lt2_textpos >= @lt2_textsize
set_line_mode
receive_binary_data @lt2_textbuffer.join
receive_end_of_binary_data
end
receive_data tail
else
receive_binary_data data
end
end
end