68 lines
2.0 KiB
Rust
68 lines
2.0 KiB
Rust
use bft_json_crdt::json_crdt::{BaseCrdt, SignedOp};
|
|
use cli::{parse_args, Commands};
|
|
use crdt::TransactionList;
|
|
use node::SideNode;
|
|
use tokio::sync::mpsc;
|
|
use websocket::WebSocketClient;
|
|
|
|
pub(crate) mod cli;
|
|
pub(crate) mod crdt;
|
|
pub(crate) mod init;
|
|
pub(crate) mod keys;
|
|
pub(crate) mod node;
|
|
pub(crate) mod utils;
|
|
pub(crate) mod websocket;
|
|
|
|
#[tokio::main]
|
|
async fn main() {
|
|
let args = parse_args();
|
|
|
|
match &args.command {
|
|
Some(Commands::Init { name }) => {
|
|
let config = init::config::SideNodeConfig {
|
|
name: name.to_string(),
|
|
};
|
|
|
|
let _ = init::init(utils::home(name), config);
|
|
}
|
|
Some(Commands::Run { name }) => {
|
|
let mut node = setup(name).await;
|
|
node.start().await;
|
|
}
|
|
None => println!("No command provided. Exiting. See --help for more information."),
|
|
}
|
|
}
|
|
|
|
/// Wire everything up outside the application so we can test more easily later
|
|
async fn setup(name: &String) -> SideNode {
|
|
let side_dir = utils::home(name);
|
|
let keys = keys::load_from_file(side_dir);
|
|
let (incoming_sender, incoming_receiver) = mpsc::channel::<SignedOp>(32);
|
|
let crdt = BaseCrdt::<TransactionList>::new(&keys);
|
|
let node = SideNode::new(crdt, keys, incoming_receiver);
|
|
WebSocketClient::start(incoming_sender).await;
|
|
println!("Node setup complete.");
|
|
node
|
|
}
|
|
|
|
// async fn maybe_autosend(
|
|
// autosend: bool,
|
|
// handle: ezsockets::Client<websocket::WebSocketClient>,
|
|
// mut node: SideNode,
|
|
// ) {
|
|
// if autosend {
|
|
// let forever = task::spawn(async {
|
|
// let mut interval = time::interval(Duration::from_millis(10));
|
|
|
|
// loop {
|
|
// interval.tick().await;
|
|
// let fake = utils::fake_transaction("foo123".to_string());
|
|
// let signed_op = node.add_transaction_local(fake);
|
|
// let json = serde_json::to_string(&signed_op).unwrap();
|
|
// handle.text(json).unwrap();
|
|
// }
|
|
// });
|
|
// forever.await.unwrap();
|
|
// }
|
|
// }
|