Skip to content

Commit

Permalink
Fix one off messaging when there is any active Listener (#54)
Browse files Browse the repository at this point in the history
* Fix one off messaging when there is any active Listener

* update changelog and pubspec

* change MessageSinkRegister sendToSinksOfType() to not add one off
messages to buffer when there is any active Listener

* update Sender send() doc comment

* Fix typo and restructure send() doc comment, add PR number in changelog
  • Loading branch information
lewandowski-jan committed May 15, 2023
1 parent db2e0e8 commit dece1d4
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 7 deletions.
4 changes: 4 additions & 0 deletions packages/comms/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
## 0.0.10

- Fix one off messages getting buffered when there are active `Listener`s (#54)

## 0.0.9

- Add `oneOff` to `send()` for marking message as available to read only once
Expand Down
11 changes: 8 additions & 3 deletions packages/comms/lib/src/message_sink_register.dart
Original file line number Diff line number Diff line change
Expand Up @@ -88,9 +88,14 @@ class MessageSinkRegister {
/// Adds [message] to all sinks in [MessageSinkRegister]'s [_messageSinks]
/// of type [Message] and updates [_messageBuffers].
void sendToSinksOfType<Message>(Message message, {bool oneOff = false}) {
getSinksOfType<Message>().forEach(
(sink) => sink.add(message),
);
final sinks = getSinksOfType<Message>()
..forEach(
(sink) => sink.add(message),
);

if (sinks.isNotEmpty && oneOff) {
return;
}

_messageBuffers[Message] = _BufferedMessage<Message>(
message: message,
Expand Down
6 changes: 4 additions & 2 deletions packages/comms/lib/src/sender.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,10 @@ typedef Send<Message> = void Function(Message message, {bool oneOff});
mixin Sender<Message> {
/// Sends [message] to all [Listener]s of type [Message].
///
/// When [oneOff] is `true` [message] will be removed from the buffer after
/// the first [Listener] of same type calls listen().
/// When [oneOff] is `true`, [message] will only be received by any [Listener]
/// currently listening for type [Message]. If there aren't any it will only
/// be received by the first [Listener] that calls `listen()` in
/// `onInitialMessage()`.
@protected
@nonVirtual
void send(Message message, {bool oneOff = false}) {
Expand Down
4 changes: 2 additions & 2 deletions packages/comms/pubspec.yaml
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
name: comms
description: Simple communication pattern abstraction on streams, created for communication between logic classes.
version: 0.0.9+1
version: 0.0.10
homepage: https://github.com/leancodepl/comms

environment:
sdk: ">=2.17.0 <3.0.0"
sdk: ">=2.17.0 <=3.0.0"

This comment has been minimized.

Copy link
@shilangyu

shilangyu Jun 1, 2023

@PiotrRogulski possible cause?


dependencies:
logging: ^1.0.2
Expand Down

0 comments on commit dece1d4

Please sign in to comment.