2018-12-16 18:43:44 +00:00
|
|
|
use std::time::Duration;
|
|
|
|
|
|
|
|
use actix::{Actor, Addr, AsyncContext, Context, Handler, SyncContext};
|
2019-05-25 20:22:26 +00:00
|
|
|
use background_jobs_core::Storage;
|
2018-12-16 18:43:44 +00:00
|
|
|
|
|
|
|
use crate::{CheckDb, ProcessJob, Server};
|
|
|
|
|
2019-05-25 20:22:26 +00:00
|
|
|
pub struct Pinger<S, W>
|
2018-12-16 18:43:44 +00:00
|
|
|
where
|
2019-05-25 20:22:26 +00:00
|
|
|
S: Storage + 'static,
|
2018-12-16 18:43:44 +00:00
|
|
|
W: Actor + Handler<ProcessJob>,
|
|
|
|
{
|
2019-05-25 20:22:26 +00:00
|
|
|
server: Addr<Server<S, W>>,
|
2018-12-16 18:43:44 +00:00
|
|
|
}
|
|
|
|
|
2019-05-25 20:22:26 +00:00
|
|
|
impl<S, W> Pinger<S, W>
|
2018-12-16 18:43:44 +00:00
|
|
|
where
|
2019-05-25 20:22:26 +00:00
|
|
|
S: Storage + 'static,
|
2018-12-16 18:43:44 +00:00
|
|
|
W: Actor + Handler<ProcessJob>,
|
|
|
|
{
|
2019-05-25 20:22:26 +00:00
|
|
|
pub fn new(server: Addr<Server<S, W>>) -> Self {
|
2018-12-16 18:43:44 +00:00
|
|
|
Pinger { server }
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-05-25 20:22:26 +00:00
|
|
|
impl<S, W> Actor for Pinger<S, W>
|
2018-12-16 18:43:44 +00:00
|
|
|
where
|
2019-05-25 20:22:26 +00:00
|
|
|
S: Storage + 'static,
|
2018-12-16 18:43:44 +00:00
|
|
|
W: Actor + Handler<ProcessJob>,
|
2019-05-25 20:22:26 +00:00
|
|
|
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);
|
|
|
|
});
|
|
|
|
}
|
|
|
|
}
|