Separate server bootstrap sequence between listen() and run()

Initially it uses a channel that given through the `run()` parameter to notify when a server becomes ready,
but that doesn't work because it never run the procedure until `await` called.
This means if it calls `await`, it blocks the procedure so it cannot consume a channel simultaneously.
Thus, it separates bootstrap sequence between `listen()` and `run()`.
`listen()`: Start UDP listening. After this function call is finished, the RADIUS server is ready.
`run()`: Start a loop to handle the RADIUS requests.
This commit is contained in:
moznion
2021-01-03 11:19:28 +09:00
parent 5c74cf92c7
commit 88e01fc828
3 changed files with 120 additions and 57 deletions
+25 -23
View File
@@ -78,9 +78,9 @@ mod tests {
use radius::core::code::Code;
use radius::core::packet::Packet;
use radius::core::rfc2865;
use radius::server::Server;
use crate::test::{LongTimeTakingHandler, MyRequestHandler, MySecretProvider};
use radius::server::Server;
#[tokio::test]
async fn test_runner() {
@@ -93,18 +93,19 @@ mod tests {
let port = 1812;
let mut server = Server::listen(
"0.0.0.0",
port,
1500,
true,
MyRequestHandler {},
MySecretProvider {},
)
.await
.unwrap();
let server_proc = tokio::spawn(async move {
Server::run(
"0.0.0.0",
port,
1500,
true,
MyRequestHandler {},
MySecretProvider {},
receiver,
)
.await
.unwrap();
server.run(receiver).await.unwrap();
});
let remote_addr: SocketAddr = format!("127.0.0.1:{}", port).parse().unwrap();
@@ -136,18 +137,19 @@ mod tests {
let port = 1812;
let mut server = Server::listen(
"0.0.0.0",
port,
1500,
true,
LongTimeTakingHandler {},
MySecretProvider {},
)
.await
.unwrap();
let server_proc = tokio::spawn(async move {
Server::run(
"0.0.0.0",
port,
1500,
true,
LongTimeTakingHandler {},
MySecretProvider {},
receiver,
)
.await
.unwrap();
server.run(receiver).await.unwrap();
});
let remote_addr: SocketAddr = format!("127.0.0.1:{}", port).parse().unwrap();