lib

Core libraries for Radroots
git clone https://radroots.dev/git/lib.git
Log | Files | Refs | README | LICENSE

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 }