better service construction

This commit is contained in:
Joe Ardent 2025-08-10 15:08:10 -07:00
parent 0666895fdd
commit b2de9352d3
2 changed files with 18 additions and 19 deletions

View file

@ -21,7 +21,7 @@ use tokio::{
net::UdpSocket, net::UdpSocket,
sync::{ sync::{
Mutex, Mutex,
mpsc::{self, UnboundedSender}, mpsc::{self, UnboundedReceiver, UnboundedSender},
}, },
task::JoinSet, task::JoinSet,
}; };
@ -88,8 +88,8 @@ pub struct JocalService {
impl JocalService { impl JocalService {
pub async fn new( pub async fn new(
config: Config, config: Config,
transfer_event_tx: UnboundedSender<TransferEvent>, ) -> crate::error::Result<(Self, UnboundedReceiver<TransferEvent>)> {
) -> crate::error::Result<Self> { let (tx, rx) = mpsc::unbounded_channel();
let socket = UdpSocket::bind(LISTENING_SOCKET_ADDR).await?; let socket = UdpSocket::bind(LISTENING_SOCKET_ADDR).await?;
socket.set_multicast_loop_v4(true)?; socket.set_multicast_loop_v4(true)?;
socket.set_multicast_ttl_v4(8)?; // 8 hops out from localnet socket.set_multicast_ttl_v4(8)?; // 8 hops out from localnet
@ -100,16 +100,19 @@ impl JocalService {
.danger_accept_invalid_certs(true) .danger_accept_invalid_certs(true)
.build()?; .build()?;
Ok(Self { Ok((
Self {
config, config,
client, client,
socket: socket.into(), socket: socket.into(),
transfer_event_tx, transfer_event_tx: tx,
peers: Default::default(), peers: Default::default(),
sessions: Default::default(), sessions: Default::default(),
running_state: Default::default(), running_state: Default::default(),
http_handle: Default::default(), http_handle: Default::default(),
}) },
rx,
))
} }
pub async fn start(&self, handles: &mut JoinSet<Listeners>) { pub async fn start(&self, handles: &mut JoinSet<Listeners>) {

View file

@ -5,7 +5,7 @@ use jocalsend::{Config, JocalService, Listeners, error::Result};
use log::{error, info}; use log::{error, info};
use ratatui::DefaultTerminal; use ratatui::DefaultTerminal;
use ratatui_explorer::FileExplorer; use ratatui_explorer::FileExplorer;
use tokio::{sync::mpsc::unbounded_channel, task::JoinSet}; use tokio::task::JoinSet;
use tui_logger::{LevelFilter, init_logger, set_env_filter_from_env}; use tui_logger::{LevelFilter, init_logger, set_env_filter_from_env};
mod app; mod app;
@ -37,11 +37,7 @@ fn main() -> Result<()> {
#[tokio::main(flavor = "multi_thread")] #[tokio::main(flavor = "multi_thread")]
async fn start_and_run(terminal: &mut DefaultTerminal, config: Config) -> Result<()> { async fn start_and_run(terminal: &mut DefaultTerminal, config: Config) -> Result<()> {
let (event_tx, event_listener) = unbounded_channel(); let (service, event_listener) = JocalService::new(config.clone()).await?;
let service = JocalService::new(config.clone(), event_tx)
.await
.expect("Could not create JocalService");
let mut app = App::new(service, event_listener); let mut app = App::new(service, event_listener);