/* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ //! A task that sniffs data use std::comm::{channel, Receiver, Sender, Disconnected}; use std::task::TaskBuilder; use resource_task::{LoadResponse}; pub type SnifferTask = Sender; pub fn new_sniffer_task(next_rx: Sender) -> SnifferTask { let (sen, rec) = channel(); let builder = TaskBuilder::new().named("SnifferManager"); builder.spawn(proc() { SnifferManager::new(rec).start(next_rx); }); sen } struct SnifferManager { data_receiver: Receiver, } impl SnifferManager { fn new(data_receiver: Receiver) -> SnifferManager { SnifferManager { data_receiver: data_receiver, } } } impl SnifferManager { fn start(&self, next_rx: Sender) { loop { match self.data_receiver.try_recv() { Ok(snif_data) => next_rx.send(snif_data), Err(Disconnected) => break, Err(_) => (), } } } }