24 assert(request->token->node);
26 auto recipientHeader = messageDefinition->getRecipientHeader(request->token->getAttributeRegistry(),request->token->status,*request->token->data,request->token->globals);
30 for (
auto& [ message_ptr ] : messages ) {
31 if(
auto message = message_ptr.lock();
33 std::ranges::contains(senderCandidates, message->origin) &&
34 message->matches(recipientHeader)
36 candidates.emplace_back( message->weak_from_this() );
39 messageDeliveryRequests.emplace_back(request->token->weak_from_this(), request->weak_from_this(), candidates, recipientHeader);
42 auto message =
static_cast<const Message*
>(observable);
44 messages.emplace_back( message->weak_from_this() );
47 for (
auto& [token_ptr, request_ptr, candidates, recipientHeader ] : messageDeliveryRequests ) {
48 if (
auto token = token_ptr.lock();
50 std::ranges::contains(recipientCandidates, token->node) &&
51 message->matches(recipientHeader)
53 candidates.emplace_back( message->weak_from_this() );
59 assert(!
"Unexpected observable type");
64 for (
auto& [token_ptr, request_ptr, candidates, recipientHeader ] : messageDeliveryRequests ) {
65 if(
auto token = token_ptr.lock() ) {
66 if ( request_ptr.lock() ) {
67 for (
auto& [message_ptr] : candidates ) {
68 if (
auto message = message_ptr.lock() ) {
69 return std::make_shared<MessageDeliveryEvent>(token.get(), message.get());