use actix::Actor;
use std::time::Duration;
use tokio::time;
use tokio_stream::wrappers::IntervalStream;
use tokio_stream::StreamExt;
use super::server::Server;
use crate::websocket::devstreams::messages;
use crate::websocket::devstreams::OutputMessageType;
pub type ConnectId = String;
pub struct AppState {
pub ss: actix::Addr<Server>,
}
impl AppState {
pub fn build() -> Self {
let s = Self {
ss: Server::default().start(),
};
Self::server_time(s.ss.clone());
s
}
pub fn server_time(svr: actix::Addr<Server>) {
tokio::spawn(async move {
let mut stream = IntervalStream::new(time::interval(Duration::from_millis(100)));
while (stream.next().await).is_some() {
let s = chrono::Utc::now()
.format("%Y-%m-%dT%H:%M:%S.%3f")
.to_string()
+ "Z";
svr.do_send(messages::Broadcast {
ty: OutputMessageType::ServerTime,
msg: s,
});
}
});
}
}