aboutsummaryrefslogtreecommitdiffstats
path: root/src/peer.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/peer.rs')
-rw-r--r--src/peer.rs41
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)
+ }
+}