seems ok, but need to optimize for database write and read in the future

with cache etc
This commit is contained in:
open-trade
2020-05-15 09:42:29 +00:00
parent f3554b153d
commit 2424dcad69
2 changed files with 42 additions and 9 deletions

View File

@@ -29,6 +29,17 @@ struct Peer {
last_reg_time: Instant,
}
impl Default for Peer {
fn default() -> Self {
Self {
socket_addr: "0.0.0.0:0".parse().unwrap(),
last_reg_time: Instant::now()
.checked_sub(std::time::Duration::from_secs(3600))
.unwrap(),
}
}
}
#[derive(Debug, Serialize, Deserialize, Default)]
struct PeerSerde {
#[serde(default)]
@@ -45,13 +56,23 @@ impl PeerMap {
fn new() -> ResultType<Self> {
Ok(Self {
map: Default::default(),
db: super::SledAsync::new("./sled.db")?,
db: super::SledAsync::new("./sled.db", true)?,
})
}
#[inline]
fn insert(&mut self, key: String, peer: Peer) {
if self.map.write().unwrap().insert(key, peer).is_none() {}
let ip = peer.socket_addr.ip();
if self
.map
.write()
.unwrap()
.insert(key.clone(), peer)
.is_none()
{
let ip = ip.to_string();
self.db.insert(key, PeerSerde { ip });
}
}
#[inline]
@@ -61,7 +82,7 @@ impl PeerMap {
return p;
} else {
if let Some(_) = self.db.get(key).await {
// to-do
return Some(Peer::default());
}
}
None