markClosed method
The relay ended the request with a CLOSED carrying message.
Both at once, so the outcome is never observed as a CLOSED stripped of the reason the relay gave for it.
Implementation
void markClosed(String? message) {
if (_receivedClosed && _closedMessage == message) return;
_receivedClosed = true;
_closedMessage = message;
onOutcomeChanged?.call();
}