MCPcopy Create free account
hub / github.com/actor-framework/actor-framework / dispatch

Method dispatch

libcaf_io/caf/io/basp/instance.cpp:163–203  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

161}
162
163bool instance::dispatch(scheduler* ctx, const strong_actor_ptr& sender,
164 const node_id& dest_node, uint64_t dest_actor,
165 uint8_t flags, message_id mid, const message& msg) {
166 auto lg = log::io::trace("sender = {}, dest_node = {}, mid = {}, msg = {}",
167 sender, dest_node, mid, msg);
168 CAF_ASSERT(dest_node && this_node_ != dest_node);
169 auto path = lookup(dest_node);
170 if (!path)
171 return false;
172 auto& source_node = sender ? sender->node() : this_node_;
173 if (dest_node == path->next_hop && source_node == this_node_) {
174 header hdr{message_type::direct_message,
175 flags,
176 0,
177 mid.integer_value(),
178 sender ? sender->id() : invalid_actor_id,
179 dest_actor};
180 auto writer = make_callback([&](binary_serializer& sink) { //
181 return sink.apply(msg);
182 });
183 write(*sys_, ctx, callee_.get_buffer(path->hdl), hdr, &writer);
184 } else {
185 header hdr{message_type::routed_message,
186 flags,
187 0,
188 mid.integer_value(),
189 sender ? sender->id() : invalid_actor_id,
190 dest_actor};
191 auto writer = make_callback([&](binary_serializer& sink) {
192 log::io::debug(
193 "send routed message: source_node = {} dest_node = {} msg = {}",
194 source_node, dest_node, msg);
195 return sink.apply(source_node) //
196 && sink.apply(dest_node) //
197 && sink.apply(msg);
198 });
199 write(*sys_, ctx, callee_.get_buffer(path->hdl), hdr, &writer);
200 }
201 flush(*path);
202 return true;
203}
204
205void instance::write(actor_system& sys, scheduler*, byte_buffer& buf,
206 header& hdr, payload_writer* pw) {

Callers 7

make_behaviorMethod · 0.80
make_proxyMethod · 0.80
learned_new_nodeMethod · 0.80
~prometheus_scrapingMethod · 0.80
stopMethod · 0.80
~implMethod · 0.80

Calls 8

traceFunction · 0.85
debugFunction · 0.85
integer_valueMethod · 0.80
make_callbackFunction · 0.50
writeFunction · 0.50
nodeMethod · 0.45
idMethod · 0.45
applyMethod · 0.45

Tested by

no test coverage detected