Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Use typed Mailbox::get_async<>() instead of using casts everywhere.
[simgrid.git] / examples / s4u / app-bittorrent / s4u-peer.cpp
index f147320..2f0f8ca 100644 (file)
@@ -116,7 +116,7 @@ bool Peer::getPeersFromTracker()
   }
 
   try {
-    auto* answer = static_cast<TrackerAnswer*>(mailbox_->get(GET_PEERS_TIMEOUT));
+    auto* answer = mailbox_->get<TrackerAnswer>(GET_PEERS_TIMEOUT);
     // Add the peers the tracker gave us to our peer list.
     for (auto const& peer_id : answer->getPeers())
       if (id != peer_id)
@@ -251,13 +251,11 @@ void Peer::leech()
   sendHandshakeToAllPeers();
   XBT_DEBUG("Starting main leech loop listening on mailbox: %s", mailbox_->get_cname());
 
-  void* data = nullptr;
   while (simgrid::s4u::Engine::get_clock() < deadline && countPieces(bitfield_) < FILE_PIECES) {
     if (comm_received == nullptr) {
-      comm_received = mailbox_->get_async(&data);
+      comm_received = mailbox_->get_async<Message>(&message);
     }
     if (comm_received->test()) {
-      message = static_cast<Message*>(data);
       handleMessage();
       delete message;
       comm_received = nullptr;
@@ -280,13 +278,11 @@ void Peer::seed()
   double next_choked_update = simgrid::s4u::Engine::get_clock() + UPDATE_CHOKED_INTERVAL;
   XBT_DEBUG("Start seeding.");
   // start the main seed loop
-  void* data = nullptr;
   while (simgrid::s4u::Engine::get_clock() < deadline) {
     if (comm_received == nullptr) {
-      comm_received = mailbox_->get_async(&data);
+      comm_received = mailbox_->get_async<Message>(&message);
     }
     if (comm_received->test()) {
-      message = static_cast<Message*>(data);
       handleMessage();
       delete message;
       comm_received = nullptr;