SVIFT is a TUI peer-to-peer file transfer application based on the BitTorrent protocol, built as a foray into networking and distributed computing.
Clone the Git repository
git clone https://github.com/shivrm/svift
cd sviftRun with cargo
cargo run --release --bin=tracker
cargo run --release --bin=serverSVIFT uses an asynchronous event-based architecture built on top of Tokio. Each component is an independent actor that communicates with other components through message passing. This allows for lock-free management of many moving parts.
Client Architecture:
graph LR
A["Application"] --> S["Server"]
A <--> T["TUI"]
T <--> S
M["Multicast Handler"] --> S
S <--> T1["Torrent 1"]
S <--> T2["Torrent ..."]
S <--> TN["Torrent N"]
T1 <--> FileManager
T1 <--> PeerManager
PeerManager <--> P1[Peer 1]
PeerManager <--> P2[Peer ...]
PeerManager <--> PN[Peer N]
P1 <--> TS1["TcpStream"]
PN <--> TS2["TcpStream"]
- TUI with live status for easier usage
-
.torrentmetadata creation within TUI - Automatic peer pruning based on activity and reliability
- Trackerless peer discovery through local multicast and mutual peer exchange
- Peer discovery through DHTs (a good exercise, but is our network big enough?)
- Encrypted communication between peers
- Detailed event log for each torrent instead of a single message stream
- Make TUI nicer to use
