From 21cee15d8dea58941b7b6c7622575a4d84e58b14 Mon Sep 17 00:00:00 2001 From: Svyatoslav Nikolsky Date: Mon, 21 Nov 2016 15:33:13 +0300 Subject: [PATCH] use futures::lazy instead of manual IndexedServerTaskFuture --- sync/src/synchronization_server.rs | 36 +++++------------------------- 1 file changed, 6 insertions(+), 30 deletions(-) diff --git a/sync/src/synchronization_server.rs b/sync/src/synchronization_server.rs index 8dfb93d5..6ac83264 100644 --- a/sync/src/synchronization_server.rs +++ b/sync/src/synchronization_server.rs @@ -3,7 +3,7 @@ use std::sync::atomic::{AtomicBool, Ordering}; use std::thread; use std::collections::{VecDeque, HashMap}; use std::collections::hash_map::Entry; -use futures::{Future, Poll, Async}; +use futures::{Future, BoxFuture, lazy, finished}; use parking_lot::{Mutex, Condvar}; use message::common::{InventoryVector, InventoryType}; use db; @@ -89,35 +89,11 @@ impl IndexedServerTask { IndexedServerTask::new(ServerTask::Ignore, ServerTaskIndex::Final(id)) } - pub fn future(self, peer_index: usize, server: Weak) -> IndexedServerTaskFuture { - IndexedServerTaskFuture::::new(server, peer_index, self) - } -} - -/// Future server task execution -pub struct IndexedServerTaskFuture { - server: Weak, - peer_index: usize, - task: Option, -} - -impl IndexedServerTaskFuture where T: Server { - pub fn new(server: Weak, peer_index: usize, task: IndexedServerTask) -> Self { - IndexedServerTaskFuture { - server: server, - peer_index: peer_index, - task: Some(task), - } - } -} - -impl Future for IndexedServerTaskFuture where T: Server { - type Item = (); - type Error = (); - - fn poll(&mut self) -> Poll { - self.task.take().map(|t| self.server.upgrade().map(|s| s.add_task(self.peer_index, t))); - Ok(Async::Ready(())) + pub fn future(self, peer_index: usize, server: Weak) -> BoxFuture<(), ()> { + lazy(move || { + server.upgrade().map(|s| s.add_task(peer_index, self)); + finished::<(), ()>(()) + }).boxed() } }