Skip to content

Commit 620da61

Browse files
committed
Added periodic check initialization in init() function
1 parent d750b15 commit 620da61

File tree

4 files changed

+22
-30
lines changed

4 files changed

+22
-30
lines changed

examples/updater/src/main.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,17 @@ mod server;
88

99
use std::{thread, time::Duration};
1010

11-
use messages::UpdaterOutMessage;
1211
use server::{UpdateServerState, UpdaterServer};
1312
use spawned_concurrency::tasks::GenServer as _;
1413
use spawned_rt::tasks as rt;
1514

1615
fn main() {
1716
rt::run(async {
18-
let mut update_server = UpdaterServer::start(UpdateServerState {
17+
UpdaterServer::start(UpdateServerState {
1918
url: "https://httpbin.org/ip".to_string(),
2019
periodicity: Duration::from_millis(1000),
2120
});
2221

23-
let result = UpdaterServer::check(&mut update_server).await;
24-
tracing::info!("Update check done: {result:?}");
25-
assert_eq!(result, UpdaterOutMessage::Ok);
26-
2722
// giving it some time before ending
2823
thread::sleep(Duration::from_secs(10));
2924
})

examples/updater/src/server.rs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,6 @@ pub struct UpdateServerState {
1515
}
1616
pub struct UpdaterServer {}
1717

18-
impl UpdaterServer {
19-
pub async fn check(server: &mut UpdateServerHandle) -> OutMessage {
20-
match server.cast(InMessage::Check).await {
21-
Ok(_) => OutMessage::Ok,
22-
Err(_) => OutMessage::Error,
23-
}
24-
}
25-
}
26-
2718
impl GenServer for UpdaterServer {
2819
type CallMsg = ();
2920
type CastMsg = InMessage;
@@ -35,6 +26,16 @@ impl GenServer for UpdaterServer {
3526
Self {}
3627
}
3728

29+
// Initializing GenServer to start periodic checks
30+
async fn init(
31+
&mut self,
32+
handle: &GenServerHandle<Self>,
33+
state: Self::State,
34+
) -> Result<Self::State, Self::Error> {
35+
send_after(state.periodicity, handle.clone(), InMessage::Check);
36+
Ok(state)
37+
}
38+
3839
async fn handle_call(
3940
&mut self,
4041
_message: Self::CallMsg,

examples/updater_threads/src/main.rs

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,17 @@ mod server;
88

99
use std::{thread, time::Duration};
1010

11-
use messages::UpdaterOutMessage;
1211
use server::{UpdateServerState, UpdaterServer};
1312
use spawned_concurrency::threads::GenServer as _;
1413
use spawned_rt::threads as rt;
1514

1615
fn main() {
1716
rt::run(|| {
18-
let mut update_server = UpdaterServer::start(UpdateServerState {
17+
UpdaterServer::start(UpdateServerState {
1918
url: "https://httpbin.org/ip".to_string(),
2019
periodicity: Duration::from_millis(1000),
2120
});
2221

23-
let result = UpdaterServer::check(&mut update_server);
24-
tracing::info!("Update check done: {result:?}");
25-
assert_eq!(result, UpdaterOutMessage::Ok);
26-
2722
// giving it some time before ending
2823
thread::sleep(Duration::from_secs(10));
2924
})

examples/updater_threads/src/server.rs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,6 @@ pub struct UpdateServerState {
1616
}
1717
pub struct UpdaterServer {}
1818

19-
impl UpdaterServer {
20-
pub fn check(server: &mut UpdateServerHandle) -> OutMessage {
21-
match server.cast(InMessage::Check) {
22-
Ok(_) => OutMessage::Ok,
23-
Err(_) => OutMessage::Error,
24-
}
25-
}
26-
}
27-
2819
impl GenServer for UpdaterServer {
2920
type CallMsg = ();
3021
type CastMsg = InMessage;
@@ -36,6 +27,16 @@ impl GenServer for UpdaterServer {
3627
Self {}
3728
}
3829

30+
// Initializing GenServer to start periodic checks.
31+
fn init(
32+
&mut self,
33+
handle: &GenServerHandle<Self>,
34+
state: Self::State,
35+
) -> Result<Self::State, Self::Error> {
36+
send_after(state.periodicity, handle.clone(), InMessage::Check);
37+
Ok(state)
38+
}
39+
3940
fn handle_call(
4041
&mut self,
4142
_message: Self::CallMsg,

0 commit comments

Comments
 (0)