faces: Replace deadline_timer usage in TcpChannel with Scheduler-based events

Change-Id: I37a7a3203b3187e029697a21e3314cfacbbed314
Refs: #1368
diff --git a/daemon/face/tcp-channel.cpp b/daemon/face/tcp-channel.cpp
index cd2fb4f..d058944 100644
--- a/daemon/face/tcp-channel.cpp
+++ b/daemon/face/tcp-channel.cpp
@@ -83,18 +83,14 @@
   shared_ptr<ip::tcp::socket> clientSocket =
     make_shared<ip::tcp::socket>(ref(getGlobalIoService()));
 
-  shared_ptr<ndn::monotonic_deadline_timer> connectTimeoutTimer =
-    make_shared<ndn::monotonic_deadline_timer>(ref(getGlobalIoService()));
+  EventId connectTimeoutEvent = scheduler::schedule(timeout,
+                                                    bind(&TcpChannel::handleFailedConnect, this,
+                                                         clientSocket, onConnectFailed));
 
   clientSocket->async_connect(remoteEndpoint,
                               bind(&TcpChannel::handleSuccessfulConnect, this, _1,
-                                   clientSocket, connectTimeoutTimer,
+                                   clientSocket, connectTimeoutEvent,
                                    onFaceCreated, onConnectFailed));
-
-  connectTimeoutTimer->expires_from_now(timeout);
-  connectTimeoutTimer->async_wait(bind(&TcpChannel::handleFailedConnect, this, _1,
-                                       clientSocket, connectTimeoutTimer,
-                                       onConnectFailed));
 }
 
 void
@@ -106,23 +102,19 @@
   shared_ptr<ip::tcp::socket> clientSocket =
     make_shared<ip::tcp::socket>(ref(getGlobalIoService()));
 
-  shared_ptr<ndn::monotonic_deadline_timer> connectTimeoutTimer =
-    make_shared<ndn::monotonic_deadline_timer>(ref(getGlobalIoService()));
-
   ip::tcp::resolver::query query(remoteHost, remotePort);
   shared_ptr<ip::tcp::resolver> resolver =
     make_shared<ip::tcp::resolver>(ref(getGlobalIoService()));
 
+  EventId connectTimeoutEvent = scheduler::schedule(timeout,
+                                                    bind(&TcpChannel::handleFailedConnect, this,
+                                                         clientSocket, onConnectFailed));
+
   resolver->async_resolve(query,
                           bind(&TcpChannel::handleEndpointResolution, this, _1, _2,
-                               clientSocket, connectTimeoutTimer,
+                               clientSocket, connectTimeoutEvent,
                                onFaceCreated, onConnectFailed,
                                resolver));
-
-  connectTimeoutTimer->expires_from_now(timeout);
-  connectTimeoutTimer->async_wait(bind(&TcpChannel::handleFailedConnect, this, _1,
-                                       clientSocket, connectTimeoutTimer,
-                                       onConnectFailed));
 }
 
 size_t
@@ -192,11 +184,11 @@
 void
 TcpChannel::handleSuccessfulConnect(const boost::system::error_code& error,
                                     const shared_ptr<ip::tcp::socket>& socket,
-                                    const shared_ptr<ndn::monotonic_deadline_timer>& timer,
+                                    const EventId& connectTimeoutEvent,
                                     const FaceCreatedCallback& onFaceCreated,
                                     const ConnectFailedCallback& onConnectFailed)
 {
-  timer->cancel();
+  scheduler::cancel(connectTimeoutEvent);
 
   if (error) {
     if (error == boost::system::errc::operation_canceled) // when socket is closed by someone
@@ -219,20 +211,11 @@
 }
 
 void
-TcpChannel::handleFailedConnect(const boost::system::error_code& error,
-                                const shared_ptr<ip::tcp::socket>& socket,
-                                const shared_ptr<ndn::monotonic_deadline_timer>& timer,
+TcpChannel::handleFailedConnect(const shared_ptr<ip::tcp::socket>& socket,
                                 const ConnectFailedCallback& onConnectFailed)
 {
-  if (error) { // e.g., cancelled
-    return;
-  }
-
-  NFD_LOG_DEBUG("Connect to remote endpoint timed out: "
-                << error.category().message(error.value()));
-
-  onConnectFailed("Connect to remote endpoint timed out: " +
-                  error.category().message(error.value()));
+  NFD_LOG_DEBUG("Connect to remote endpoint timed out");
+  onConnectFailed("Connect to remote endpoint timed out");
   socket->close(); // abort the connection
 }
 
@@ -240,7 +223,7 @@
 TcpChannel::handleEndpointResolution(const boost::system::error_code& error,
                                      ip::tcp::resolver::iterator remoteEndpoint,
                                      const shared_ptr<boost::asio::ip::tcp::socket>& socket,
-                                     const shared_ptr<ndn::monotonic_deadline_timer>& timer,
+                                     const EventId& connectTimeoutEvent,
                                      const FaceCreatedCallback& onFaceCreated,
                                      const ConnectFailedCallback& onConnectFailed,
                                      const shared_ptr<ip::tcp::resolver>& resolver)
@@ -252,7 +235,7 @@
         return;
 
       socket->close();
-      timer->cancel();
+      scheduler::cancel(connectTimeoutEvent);
 
       NFD_LOG_DEBUG("Remote endpoint hostname or port cannot be resolved: "
                     << error.category().message(error.value()));
@@ -265,7 +248,7 @@
   // got endpoint, now trying to connect (only try the first resolution option)
   socket->async_connect(*remoteEndpoint,
                         bind(&TcpChannel::handleSuccessfulConnect, this, _1,
-                             socket, timer,
+                             socket, connectTimeoutEvent,
                              onFaceCreated, onConnectFailed));
 }