diff options
Diffstat (limited to 'src/peer.rs')
-rw-r--r-- | src/peer.rs | 41 |
1 files changed, 30 insertions, 11 deletions
diff --git a/src/peer.rs b/src/peer.rs index 5535b09..29b90a2 100644 --- a/src/peer.rs +++ b/src/peer.rs @@ -1,12 +1,31 @@ -//use errors::*; - -// DatPeer -// connection (thread?) -// last_sent_ts -// last_received_ts -// has_messages -// registers: vec? map? -// -// fn has(reg, u64) -// fn has_intersection(reg, bitfield) +use errors::*; +use sleep_register::{HyperRegister, SleepDirRegister}; +use protocol::DatConnection; +use bitfield::Bitfield; + +pub struct DatPeer { + registers: Vec<SleepDirRegister>, + connection: DatConnection, + have_log: Vec<Vec<Bitfield>>, +} + +impl DatPeer { + + pub fn new(connection: DatConnection, registers: Vec<SleepDirRegister>) -> DatPeer { + DatPeer { + registers, + connection, + have_log: vec![], + } + } + + pub fn has(self, register: u64, index: u64) -> Result<bool> { + for bitfield in self.have_log[register as usize].iter() { + if bitfield.get(index)? { + return Ok(true) + } + } + Ok(false) + } +} |