OLD | NEW |
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2016, 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 import 'dart:async'; | 5 import 'dart:async'; |
6 | 6 |
7 import '../stream_channel.dart'; | 7 import '../stream_channel.dart'; |
8 | 8 |
9 /// A controller for exposing a new [StreamChannel]. | 9 /// A controller for exposing a new [StreamChannel]. |
10 /// | 10 /// |
(...skipping 29 matching lines...) Expand all Loading... |
40 /// This channel should be returned to external users so they can communicate | 40 /// This channel should be returned to external users so they can communicate |
41 /// with [local]. | 41 /// with [local]. |
42 StreamChannel<T> get foreign => _foreign; | 42 StreamChannel<T> get foreign => _foreign; |
43 StreamChannel<T> _foreign; | 43 StreamChannel<T> _foreign; |
44 | 44 |
45 /// Creates a [StreamChannelController]. | 45 /// Creates a [StreamChannelController]. |
46 /// | 46 /// |
47 /// If [sync] is true, events added to either channel's sink are synchronously | 47 /// If [sync] is true, events added to either channel's sink are synchronously |
48 /// dispatched to the other channel's stream. This should only be done if the | 48 /// dispatched to the other channel's stream. This should only be done if the |
49 /// source of those events is already asynchronous. | 49 /// source of those events is already asynchronous. |
50 StreamChannelController({bool sync: false}) { | 50 /// |
| 51 /// If [allowForeignErrors] is `false`, errors are not allowed to be passed to |
| 52 /// the foreign channel's sink. If any are, the connection will close and the |
| 53 /// error will be forwarded to the foreign channel's [Sink.done] future. This |
| 54 /// guarantees that the local stream will never emit errors. |
| 55 StreamChannelController({bool allowForeignErrors: true, bool sync: false}) { |
51 var localToForeignController = new StreamController<T>(sync: sync); | 56 var localToForeignController = new StreamController<T>(sync: sync); |
52 var foreignToLocalController = new StreamController<T>(sync: sync); | 57 var foreignToLocalController = new StreamController<T>(sync: sync); |
53 _local = new StreamChannel<T>.withGuarantees( | 58 _local = new StreamChannel<T>.withGuarantees( |
54 foreignToLocalController.stream, localToForeignController.sink); | 59 foreignToLocalController.stream, localToForeignController.sink); |
55 _foreign = new StreamChannel<T>.withGuarantees( | 60 _foreign = new StreamChannel<T>.withGuarantees( |
56 localToForeignController.stream, foreignToLocalController.sink); | 61 localToForeignController.stream, foreignToLocalController.sink, |
| 62 allowSinkErrors: allowForeignErrors); |
57 } | 63 } |
58 } | 64 } |
OLD | NEW |