Skip to content

Instantly share code, notes, and snippets.

@dginev
Created August 25, 2015 14:33
Show Gist options
  • Save dginev/a21ec269c53d1e548f72 to your computer and use it in GitHub Desktop.
Save dginev/a21ec269c53d1e548f72 to your computer and use it in GitHub Desktop.
Naive and broken TaskManager
impl TaskManager {
pub fn start<'manager>(&'manager self) -> Result<(), Error> {
// We'll use some local memoization shared between source and sink:
let mut services: HashMap<String, Option<Service>> = HashMap::new();
let mut queues : HashMap<String, Vec<Task>> = HashMap::new();
// First prepare the source ventilator
let source_port = self.source_port.clone();
let source_queue_size = self.queue_size.clone();
let source_backend_address = self.backend_address.clone();
let vent_thread = thread::spawn(|| {
let sources = Server {
port : source_port.clone(),
queue_size : source_queue_size.clone(),
backend : Backend::from_address(&source_backend_address.clone())
};
sources.start_ventilator(&mut services, &mut queues);
});
// Now prepare the results sink
let result_port = self.result_port.clone();
let result_queue_size = self.queue_size.clone();
let result_backend_address = self.backend_address.clone();
let sink_thread = thread::spawn(|| {
let results = Server {
port : result_port.clone(),
queue_size : result_queue_size.clone(),
backend : Backend::from_address(&result_backend_address.clone())
};
results.start_sink(&services,&queues);
});
vent_thread.join();
sink_thread.join();
Ok(())
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment