|
55 | 55 | //! data. The user communicates with these via [`MessageSender`] and
|
56 | 56 | //! [`MessageReceiver`] respectively.
|
57 | 57 |
|
58 |
| -use async_std::{channel::bounded, task}; |
| 58 | +use async_std::channel::bounded; |
59 | 59 | pub use communicator::{
|
60 | 60 | ConnErrorReceiver, ConnectionError, InMessage, MessageDecoder, MessageReceiver, MessageSender,
|
61 | 61 | OutMessage, OutMessageBuilder,
|
62 | 62 | };
|
63 | 63 | pub(crate) use dsender::OutDatagram;
|
| 64 | +use futures::future::BoxFuture; |
64 | 65 | use tracing::info;
|
65 | 66 |
|
66 | 67 | use crate::{
|
@@ -89,69 +90,82 @@ const CHANNEL_CAPACITY: usize = 1024;
|
89 | 90 | /// closed. Once the [`MessageSender`], [`MessageReceiver`], and
|
90 | 91 | /// [`ConnErrorReceiver`] are all dropped, the networking stack will terminate
|
91 | 92 | /// completely.
|
92 |
| -pub fn startup(network: Network) -> (MessageSender, MessageReceiver, ConnErrorReceiver) { |
| 93 | +/// |
| 94 | +/// # Arguments |
| 95 | +/// |
| 96 | +/// * `spawn` - async task spawner. |
| 97 | +/// |
| 98 | +/// * `network` - network communication will happen over this socket. |
| 99 | +pub fn startup<S>(spawn: S, network: Network) -> (MessageSender, MessageReceiver, ConnErrorReceiver) |
| 100 | +where |
| 101 | + S: Fn(BoxFuture<'static, ()>), |
| 102 | +{ |
93 | 103 | let port = network.port();
|
94 | 104 | info!("Starting up network stack on port {port}...");
|
95 | 105 |
|
96 | 106 | let messages = Messages::new(network);
|
97 | 107 |
|
98 | 108 | let (out_datagrams_sender, out_datagrams_receiver) = bounded(16);
|
99 |
| - task::spawn(dsender::run(port, out_datagrams_receiver, messages.clone())); |
| 109 | + spawn(Box::pin(dsender::run( |
| 110 | + port, |
| 111 | + out_datagrams_receiver, |
| 112 | + messages.clone(), |
| 113 | + ))); |
100 | 114 |
|
101 | 115 | let (in_system_datagrams_sender, in_system_datagrams_receiver) = bounded(16);
|
102 | 116 | let (in_user_datagrams_sender, in_user_datagrams_receiver) = bounded(16);
|
103 |
| - task::spawn(dreceiver::run( |
| 117 | + spawn(Box::pin(dreceiver::run( |
104 | 118 | port,
|
105 | 119 | in_system_datagrams_sender,
|
106 | 120 | in_user_datagrams_sender,
|
107 | 121 | messages,
|
108 |
| - )); |
| 122 | + ))); |
109 | 123 |
|
110 | 124 | let resends = Resends::new();
|
111 | 125 | let (sreceiver_cancellation_sender, sreceiver_cancellation_receiver) = cancellation();
|
112 |
| - task::spawn(sreceiver::run( |
| 126 | + spawn(Box::pin(sreceiver::run( |
113 | 127 | port,
|
114 | 128 | sreceiver_cancellation_receiver,
|
115 | 129 | in_system_datagrams_receiver,
|
116 | 130 | resends.clone(),
|
117 |
| - )); |
| 131 | + ))); |
118 | 132 |
|
119 | 133 | let (inputs_sender, inputs_receiver) = bounded(CHANNEL_CAPACITY);
|
120 | 134 | let (confirmer_cancellation_sender, confirmer_cancellation_receiver) = cancellation();
|
121 | 135 | let confirms = Confirmations::new();
|
122 |
| - task::spawn(ureceiver::run( |
| 136 | + spawn(Box::pin(ureceiver::run( |
123 | 137 | port,
|
124 | 138 | confirmer_cancellation_sender,
|
125 | 139 | in_user_datagrams_receiver,
|
126 | 140 | inputs_sender,
|
127 | 141 | confirms.clone(),
|
128 |
| - )); |
| 142 | + ))); |
129 | 143 |
|
130 | 144 | let (outputs_sender, outputs_receiver) = bounded(CHANNEL_CAPACITY);
|
131 | 145 | let (errors_sender, errors_receiver) = bounded(CHANNEL_CAPACITY);
|
132 | 146 | let (resender_cancellation_sender, resender_cancellation_receiver) = cancellation();
|
133 |
| - task::spawn(resender::run( |
| 147 | + spawn(Box::pin(resender::run( |
134 | 148 | port,
|
135 | 149 | resender_cancellation_receiver,
|
136 | 150 | sreceiver_cancellation_sender,
|
137 | 151 | out_datagrams_sender.clone(),
|
138 | 152 | errors_sender,
|
139 | 153 | resends.clone(),
|
140 |
| - )); |
| 154 | + ))); |
141 | 155 |
|
142 |
| - task::spawn(confirmer::run( |
| 156 | + spawn(Box::pin(confirmer::run( |
143 | 157 | port,
|
144 | 158 | confirmer_cancellation_receiver,
|
145 | 159 | out_datagrams_sender.clone(),
|
146 | 160 | confirms,
|
147 |
| - )); |
148 |
| - task::spawn(usender::run( |
| 161 | + ))); |
| 162 | + spawn(Box::pin(usender::run( |
149 | 163 | port,
|
150 | 164 | resender_cancellation_sender,
|
151 | 165 | out_datagrams_sender,
|
152 | 166 | outputs_receiver,
|
153 | 167 | resends,
|
154 |
| - )); |
| 168 | + ))); |
155 | 169 |
|
156 | 170 | (
|
157 | 171 | MessageSender(outputs_sender),
|
|
0 commit comments