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:
dasha_uwu
2025-08-22 20:15:54 +05:00
parent 26b3a84b88
commit b5890b9664
118 changed files with 457 additions and 1923 deletions

View File

@@ -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(),
}
}

View File

@@ -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(),
}))
}