inner.rs (1396B)
1 use std::collections::HashMap; 2 use std::sync::{Arc, Mutex}; 3 4 use radroots_events::post::RadrootsPost; 5 use radroots_events_codec::parsed::RadrootsParsedData; 6 use radroots_nostr::prelude::{ 7 RadrootsNostrClient, RadrootsNostrKeys, RadrootsNostrMonitor, RadrootsNostrRelayStatus, 8 RadrootsNostrRelayUrl, 9 }; 10 use tokio::runtime::Handle; 11 use tokio::sync::broadcast; 12 use tokio::task::JoinHandle; 13 14 pub(super) struct Inner { 15 pub client: RadrootsNostrClient, 16 pub relays: Arc<Mutex<Vec<String>>>, 17 pub statuses: Arc<Mutex<HashMap<RadrootsNostrRelayUrl, RadrootsNostrRelayStatus>>>, 18 pub last_error: Arc<Mutex<Option<String>>>, 19 pub rt: Handle, 20 pub post_events_tx: broadcast::Sender<RadrootsParsedData<RadrootsPost>>, 21 pub post_events_stream: Arc<Mutex<Option<JoinHandle<()>>>>, 22 } 23 24 impl Inner { 25 pub fn new(keys: RadrootsNostrKeys, rt: Handle) -> Arc<Self> { 26 let monitor = RadrootsNostrMonitor::new(2048); 27 let client = RadrootsNostrClient::new_with_monitor(keys, monitor); 28 let (tx, _) = broadcast::channel(2048); 29 30 Arc::new(Self { 31 client, 32 relays: Arc::new(Mutex::new(Vec::new())), 33 statuses: Arc::new(Mutex::new(HashMap::new())), 34 last_error: Arc::new(Mutex::new(None)), 35 rt, 36 post_events_tx: tx, 37 post_events_stream: Arc::new(Mutex::new(None)), 38 }) 39 } 40 }