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