background-jobs/jobs-actix/src/pinger.rs

40 lines
885 B
Rust
Raw Normal View History

2018-12-16 18:43:44 +00:00
use std::time::Duration;
use actix::{Actor, Addr, AsyncContext, Context, Handler, SyncContext};
use background_jobs_core::Storage;
2018-12-16 18:43:44 +00:00
use crate::{CheckDb, ProcessJob, Server};
pub struct Pinger<S, W>
2018-12-16 18:43:44 +00:00
where
S: Storage + 'static,
2018-12-16 18:43:44 +00:00
W: Actor + Handler<ProcessJob>,
{
server: Addr<Server<S, W>>,
2018-12-16 18:43:44 +00:00
}
impl<S, W> Pinger<S, W>
2018-12-16 18:43:44 +00:00
where
S: Storage + 'static,
2018-12-16 18:43:44 +00:00
W: Actor + Handler<ProcessJob>,
{
pub fn new(server: Addr<Server<S, W>>) -> Self {
2018-12-16 18:43:44 +00:00
Pinger { server }
}
}
impl<S, W> Actor for Pinger<S, W>
2018-12-16 18:43:44 +00:00
where
S: Storage + 'static,
2018-12-16 18:43:44 +00:00
W: Actor + Handler<ProcessJob>,
Server<S, W>: Actor<Context = SyncContext<Server<S, W>>> + Handler<CheckDb>,
2018-12-16 18:43:44 +00:00
{
type Context = Context<Self>;
fn started(&mut self, ctx: &mut Self::Context) {
ctx.run_interval(Duration::from_secs(1), |actor, _| {
actor.server.do_send(CheckDb);
});
}
}