worker.on("ping", [](worker::sender tx, worker::receiver rx) {
std::cout << "After invoke" << std::endl;
if (boost::optional<std::string> message = rx.recv().get()) { // app read one chunk
std::cout << "After chunk: '" << *message << "'" << std::endl;
tx.write(*message).get(); // app write one chunk
std::cout << "After write" << std::endl;
}
std::cout << "After close" << std::endl;
});task<void>::future_type
on_invoke(task<channel<io::app::enqueue>>::future_move_type future) {
auto channel = future.get();
auto tx = std::move(channel.tx);
auto rx = std::move(channel.rx);
return tx.send<scope::chunk>("le message") // client write one chunk
.then(trace_t::bind(&on_send, std::placeholders::_1, rx))
.then(trace_t::bind(&on_chunk, std::placeholders::_1, rx)) // client read one chunk
.then(trace_t::bind(&on_choke, std::placeholders::_1));
}