OLD | NEW |
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 // Interface for decoders decoding binary data into string data. The | 5 // Interface for decoders decoding binary data into string data. The |
6 // decoder keeps track of line breaks during decoding. | 6 // decoder keeps track of line breaks during decoding. |
7 interface _StringDecoder { | 7 interface _StringDecoder { |
8 // Add more binary data to be decoded. The ownership of the buffer | 8 // Add more binary data to be decoded. The ownership of the buffer |
9 // is transfered to the decoder and the caller most not modify it any more. | 9 // is transfered to the decoder and the caller most not modify it any more. |
10 int write(List<int> buffer); | 10 int write(List<int> buffer); |
(...skipping 345 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
356 } | 356 } |
357 | 357 |
358 if (!_closed) { | 358 if (!_closed) { |
359 // Schedule data callback if string data available. | 359 // Schedule data callback if string data available. |
360 if (_clientDataHandler != null && | 360 if (_clientDataHandler != null && |
361 !_decoder.isEmpty() && | 361 !_decoder.isEmpty() && |
362 _scheduledDataCallback == null) { | 362 _scheduledDataCallback == null) { |
363 if (_scheduledLineCallback != null) { | 363 if (_scheduledLineCallback != null) { |
364 _scheduledLineCallback.cancel(); | 364 _scheduledLineCallback.cancel(); |
365 } | 365 } |
366 _scheduledDataCallback = new Timer(issueDataCallback, 0); | 366 _scheduledDataCallback = new Timer(0, issueDataCallback); |
367 } | 367 } |
368 | 368 |
369 // Schedule line callback if a line is available. | 369 // Schedule line callback if a line is available. |
370 if (_clientLineHandler != null && | 370 if (_clientLineHandler != null && |
371 (_decoder.lineBreaks > 0 || (!_decoder.isEmpty() && _inputClosed)) && | 371 (_decoder.lineBreaks > 0 || (!_decoder.isEmpty() && _inputClosed)) && |
372 _scheduledLineCallback == null) { | 372 _scheduledLineCallback == null) { |
373 if (_scheduledDataCallback != null) { | 373 if (_scheduledDataCallback != null) { |
374 _scheduledDataCallback.cancel(); | 374 _scheduledDataCallback.cancel(); |
375 } | 375 } |
376 _scheduledLineCallback = new Timer(issueLineCallback, 0); | 376 _scheduledLineCallback = new Timer(0, issueLineCallback); |
377 } | 377 } |
378 | 378 |
379 // Schedule close callback if no more data and input is closed. | 379 // Schedule close callback if no more data and input is closed. |
380 if (_decoder.isEmpty() && | 380 if (_decoder.isEmpty() && |
381 _inputClosed && | 381 _inputClosed && |
382 _scheduledCloseCallback == null) { | 382 _scheduledCloseCallback == null) { |
383 _scheduledCloseCallback = new Timer(issueCloseCallback, 0); | 383 _scheduledCloseCallback = new Timer(0, issueCloseCallback); |
384 } | 384 } |
385 } | 385 } |
386 } | 386 } |
387 | 387 |
388 InputStream _input; | 388 InputStream _input; |
389 String _encoding; | 389 String _encoding; |
390 _StringDecoder _decoder; | 390 _StringDecoder _decoder; |
391 bool _inputClosed = false; // Is the underlying input stream closed? | 391 bool _inputClosed = false; // Is the underlying input stream closed? |
392 bool _closed = false; // Is this stream closed. | 392 bool _closed = false; // Is this stream closed. |
393 bool _eof = false; // Has all data been read from the decoder? | 393 bool _eof = false; // Has all data been read from the decoder? |
394 Timer _scheduledDataCallback; | 394 Timer _scheduledDataCallback; |
395 Timer _scheduledLineCallback; | 395 Timer _scheduledLineCallback; |
396 Timer _scheduledCloseCallback; | 396 Timer _scheduledCloseCallback; |
397 Function _clientDataHandler; | 397 Function _clientDataHandler; |
398 Function _clientLineHandler; | 398 Function _clientLineHandler; |
399 Function _clientCloseHandler; | 399 Function _clientCloseHandler; |
400 } | 400 } |
OLD | NEW |