use std::old_io::{IoResult};
use std::old_io::net::ip::{SocketAddr, IpAddr};
use types::{Timepoint};
pub mod udp;
pub struct AnnounceInfo {
pub leechers: i32,
pub seeders: i32,
pub peers: Vec<SocketAddr>,
pub interval: Timepoint
}
#[derive(Copy)]
pub struct ScrapeInfo {
pub leechers: i32,
pub seeders: i32,
pub downloads: i32
}
#[derive(Copy)]
pub struct TransferStatus {
pub downloaded: i64,
pub remaining: i64,
pub uploaded: i64
}
pub trait Tracker {
fn local_ip(&mut self) -> IpAddr;
fn send_scrape(&mut self) -> IoResult<ScrapeInfo>;
fn start_announce(&mut self, remaining: i64) -> IoResult<AnnounceInfo>;
fn update_announce(&mut self, status: TransferStatus) -> IoResult<AnnounceInfo>;
fn stop_announce(&mut self, status: TransferStatus) -> IoResult<()>;
fn complete_announce(&mut self, status: TransferStatus) -> IoResult<AnnounceInfo>;
}