Services refactor
Replace structs of Dep<Service> with OnceServices, so each service has a Services reference Remove service name => Service map Flatten Services.rooms Make reqwest Clients lazy initialized (client service)
This commit is contained in:
@@ -9,17 +9,11 @@ use tuwunel_core::{
|
||||
use tuwunel_database::{Deserialized, Json, Map};
|
||||
|
||||
use super::Presence;
|
||||
use crate::{Dep, globals, users};
|
||||
|
||||
pub(crate) struct Data {
|
||||
presenceid_presence: Arc<Map>,
|
||||
userid_presenceid: Arc<Map>,
|
||||
services: Services,
|
||||
}
|
||||
|
||||
struct Services {
|
||||
globals: Dep<globals::Service>,
|
||||
users: Dep<users::Service>,
|
||||
services: Arc<crate::services::OnceServices>,
|
||||
}
|
||||
|
||||
impl Data {
|
||||
@@ -28,10 +22,7 @@ impl Data {
|
||||
Self {
|
||||
presenceid_presence: db["presenceid_presence"].clone(),
|
||||
userid_presenceid: db["userid_presenceid"].clone(),
|
||||
services: Services {
|
||||
globals: args.depend::<globals::Service>("globals"),
|
||||
users: args.depend::<users::Service>("users"),
|
||||
},
|
||||
services: args.services.clone(),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -8,13 +8,9 @@ use futures::{Stream, StreamExt, TryFutureExt, stream::FuturesUnordered};
|
||||
use loole::{Receiver, Sender};
|
||||
use ruma::{OwnedUserId, UInt, UserId, events::presence::PresenceEvent, presence::PresenceState};
|
||||
use tokio::time::sleep;
|
||||
use tuwunel_core::{
|
||||
Error, Result, Server, checked, debug, debug_warn, error, result::LogErr, trace,
|
||||
};
|
||||
use tuwunel_database::Database;
|
||||
use tuwunel_core::{Error, Result, checked, debug, debug_warn, error, result::LogErr, trace};
|
||||
|
||||
use self::{data::Data, presence::Presence};
|
||||
use crate::{Dep, globals, users};
|
||||
|
||||
pub struct Service {
|
||||
timer_channel: (Sender<TimerType>, Receiver<TimerType>),
|
||||
@@ -22,14 +18,7 @@ pub struct Service {
|
||||
idle_timeout: u64,
|
||||
offline_timeout: u64,
|
||||
db: Data,
|
||||
services: Services,
|
||||
}
|
||||
|
||||
struct Services {
|
||||
server: Arc<Server>,
|
||||
db: Arc<Database>,
|
||||
globals: Dep<globals::Service>,
|
||||
users: Dep<users::Service>,
|
||||
services: Arc<crate::services::OnceServices>,
|
||||
}
|
||||
|
||||
type TimerType = (OwnedUserId, Duration);
|
||||
@@ -46,12 +35,7 @@ impl crate::Service for Service {
|
||||
idle_timeout: checked!(idle_timeout_s * 1_000)?,
|
||||
offline_timeout: checked!(offline_timeout_s * 1_000)?,
|
||||
db: Data::new(&args),
|
||||
services: Services {
|
||||
server: args.server.clone(),
|
||||
db: args.db.clone(),
|
||||
globals: args.depend::<globals::Service>("globals"),
|
||||
users: args.depend::<users::Service>("users"),
|
||||
},
|
||||
services: args.services.clone(),
|
||||
}))
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user