1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
use super::super::{tun, udp, Endpoint};
use super::types::Callbacks;
use super::queue::ParallelJob;
use super::receive::ReceiveJob;
use super::send::SendJob;
use crossbeam_channel::Receiver;
pub enum JobUnion<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>> {
Outbound(SendJob<E, C, T, B>),
Inbound(ReceiveJob<E, C, T, B>),
}
pub fn worker<E: Endpoint, C: Callbacks, T: tun::Writer, B: udp::Writer<E>>(
receiver: Receiver<JobUnion<E, C, T, B>>,
) {
loop {
match receiver.recv() {
Err(_) => break,
Ok(JobUnion::Inbound(job)) => {
job.parallel_work();
job.queue().consume();
}
Ok(JobUnion::Outbound(job)) => {
job.parallel_work();
job.queue().consume();
}
}
}
}
|