stop coutner when captcha is removed

This commit is contained in:
Aravinth Manivannan 2021-07-20 12:50:23 +05:30
parent 6eac51de10
commit 1d4f97f511
Signed by: realaravinth
GPG Key ID: AD9F0F08E855ED88
1 changed files with 16 additions and 6 deletions

View File

@ -30,6 +30,8 @@ use crate::errors::*;
use crate::master::messages::{AddSite, AddVisitor, RemoveCaptcha, Rename}; use crate::master::messages::{AddSite, AddVisitor, RemoveCaptcha, Rename};
use crate::master::Master as MasterTrait; use crate::master::Master as MasterTrait;
use super::counter::{GetCurrentVisitorCount, Stop};
/// This Actor manages the [Counter] actors. /// This Actor manages the [Counter] actors.
/// A service can have several [Counter] actors with /// A service can have several [Counter] actors with
/// varying [Defense][crate::defense::Defense] configurations /// varying [Defense][crate::defense::Defense] configurations
@ -68,8 +70,8 @@ impl Master {
} }
/// remvoes [Counter] actor from [Master] /// remvoes [Counter] actor from [Master]
pub fn rm_site(&mut self, id: &str) { pub fn rm_site(&mut self, id: &str) -> Option<(Option<()>, Addr<Counter>)> {
self.sites.remove(id); self.sites.remove(id)
} }
/// renames [Counter] actor /// renames [Counter] actor
@ -167,7 +169,6 @@ impl Handler<CleanUp> for Master {
info!("init master actor cleanup up"); info!("init master actor cleanup up");
let task = async move { let task = async move {
for (id, (new, addr)) in sites.iter() { for (id, (new, addr)) in sites.iter() {
use super::counter::{GetCurrentVisitorCount, Stop};
let visitor_count = addr.send(GetCurrentVisitorCount).await.unwrap(); let visitor_count = addr.send(GetCurrentVisitorCount).await.unwrap();
println!("{}", visitor_count); println!("{}", visitor_count);
if visitor_count == 0 && new.is_some() { if visitor_count == 0 && new.is_some() {
@ -190,10 +191,19 @@ impl Handler<CleanUp> for Master {
impl Handler<RemoveCaptcha> for Master { impl Handler<RemoveCaptcha> for Master {
type Result = MessageResult<RemoveCaptcha>; type Result = MessageResult<RemoveCaptcha>;
fn handle(&mut self, m: RemoveCaptcha, _ctx: &mut Self::Context) -> Self::Result { fn handle(&mut self, m: RemoveCaptcha, ctx: &mut Self::Context) -> Self::Result {
let (tx, rx) = channel(); let (tx, rx) = channel();
self.rm_site(&m.0); if let Some((_, addr)) = self.rm_site(&m.0) {
tx.send(Ok(())).unwrap(); let fut = async move {
//addr.send(Stop).await?;
let res: CaptchaResult<()> = addr.send(Stop).await.map_err(|e| e.into());
let _ = tx.send(res);
}
.into_actor(self);
ctx.spawn(fut);
} else {
tx.send(Ok(())).unwrap();
}
MessageResult(rx) MessageResult(rx)
} }
} }