async fn session(
ep: &Endpoint,
ep_rx: &mut Receiver<Option<Endpoint>>,
act_rx: &mut UnboundedReceiver<UserAction>,
presenter: &Arc<dyn Presenter>,
data_dir: &Path,
dir_hash: &str,
state: &Arc<Mutex<State>>,
) -> SessionEnd