51: def receive_data data
52: return unless (data and data.length > 0)
53:
54:
55: @lt2_mode ||= :lines
56: @lt2_delimiter ||= "\n"
57: @lt2_linebuffer ||= []
58:
59: if @lt2_mode == :lines
60: if ix = data.index( @lt2_delimiter )
61: @lt2_linebuffer << data[0...ix]
62: ln = @lt2_linebuffer.join
63: @lt2_linebuffer.clear
64: if @lt2_delimiter == "\n"
65: ln.chomp!
66: end
67: receive_line ln
68: receive_data data[(ix+@lt2_delimiter.length)..-1]
69: else
70: @lt2_linebuffer << data
71: end
72: elsif @lt2_mode == :text
73: if @lt2_textsize
74: needed = @lt2_textsize - @lt2_textpos
75: will_take = if data.length > needed
76: needed
77: else
78: data.length
79: end
80:
81: @lt2_textbuffer << data[0...will_take]
82: tail = data[will_take..-1]
83:
84: @lt2_textpos += will_take
85: if @lt2_textpos >= @lt2_textsize
86: receive_binary_data @lt2_textbuffer.join
87: set_line_mode
88: end
89:
90: receive_data tail
91: else
92: receive_binary_data data
93: end
94: end
95: end