use crate::actors::prelude::*;
use serde::{Serialize, Deserialize};
use std::sync::{Arc, Mutex};
use std::thread;
use std::time::Duration;
pub mod commands {
#[derive(Serialize, Deserialize, Debug)]
pub struct GetData { pub c: u32 }
}
pub mod responses {
#[derive(Serialize, Deserialize, Debug)]
pub struct Data { pub value: String }
}
pub struct Storage {}
impl Storage {
pub fn props() -> Props { Props::new(tsafe!(Storage::new()))}
pub fn new() -> Storage {
Storage {}
}
}
impl Actor for Storage {
fn receive(&mut self, msg: Message, mut ctx: ActorContext) -> HandleResult {
let msg = msg.get();
match_downcast_ref!(msg, {
m: commands::GetData => {
println!("Server -> message={:?}", m);
thread::sleep(Duration::from_secs(1));
ctx.sender.tell(msg!(responses::Data { value: format!("Data-{}", m.c) }), Some(&ctx.self_));
},
_ => return Ok(false)
});
Ok(true)
}
}