Skip to content
Snippets Groups Projects
Commit aba0db26 authored by insert's avatar insert
Browse files

Update cached channel state from notifications.

parent d95982fb
Branches
Tags
1 merge request!1Caching and other small changes.
...@@ -139,36 +139,54 @@ impl<'r> FromParam<'r> for Channel { ...@@ -139,36 +139,54 @@ impl<'r> FromParam<'r> for Channel {
} }
} }
/*pub fn test() { use crate::notifications::events::Notification;
use std::time::Instant;
let now = Instant::now();
let mut cache = CACHE.lock().unwrap();
println!("I'm about to write 4 million entries to cache.");
for i in 0..4_000_000 {
let c = Channel {
id: "potato".to_string(),
channel_type: 0,
active: None,
last_message: None,
description: None,
guild: None,
name: None,
owner: None,
recipients: None
};
cache.put(format!("{}", i), c);
}
println!("It took {} seconds, roughly {}ms per entry.", now.elapsed().as_secs_f64(), now.elapsed().as_millis() as f64 / 1_000_000.0); pub fn process_event(event: &Notification) {
match event {
Notification::group_user_join(ev) => {
let mut cache = CACHE.lock().unwrap();
let entry = cache.pop(&ev.id);
let now = Instant::now(); if entry.is_some() {
println!("Now I'm going to read every entry and immediately dispose of it."); let mut channel = entry.unwrap();
for i in 0..4_000_000 { channel.recipients.as_mut().unwrap().push(ev.user.clone());
cache.get(&format!("{}", i)); cache.put(ev.id.clone(), channel);
} }
}
Notification::group_user_leave(ev) => {
let mut cache = CACHE.lock().unwrap();
let entry = cache.pop(&ev.id);
println!("It took {} seconds, roughly {}ms per entry.", now.elapsed().as_secs_f64(), now.elapsed().as_millis() as f64 / 1_000_000.0); if entry.is_some() {
}*/ let mut channel = entry.unwrap();
let recipients = channel.recipients.as_mut().unwrap();
if let Some(pos) = recipients.iter().position(|x| *x == ev.user) {
recipients.remove(pos);
}
cache.put(ev.id.clone(), channel);
}
}
Notification::guild_channel_create(ev) => {
let mut cache = CACHE.lock().unwrap();
cache.put(
ev.id.clone(),
Channel {
id: ev.channel.clone(),
channel_type: 2,
active: None,
last_message: None,
recipients: None,
owner: None,
guild: Some(ev.id.clone()),
name: Some(ev.name.clone()),
description: Some(ev.description.clone())
}
);
}
Notification::guild_channel_delete(ev) => {
let mut cache = CACHE.lock().unwrap();
cache.pop(&ev.channel);
}
_ => {}
}
}
...@@ -38,4 +38,8 @@ impl Notification { ...@@ -38,4 +38,8 @@ impl Notification {
unreachable!() unreachable!()
} }
} }
pub fn push_to_cache(&self) {
crate::database::channel::process_event(&self);
}
} }
...@@ -17,6 +17,8 @@ pub fn send_message<U: Into<Option<Vec<String>>>, G: Into<Option<String>>>( ...@@ -17,6 +17,8 @@ pub fn send_message<U: Into<Option<Vec<String>>>, G: Into<Option<String>>>(
let users = users.into(); let users = users.into();
let guild = guild.into(); let guild = guild.into();
data.push_to_cache();
if pubsub::send_message(users.clone(), guild.clone(), data.clone()) { if pubsub::send_message(users.clone(), guild.clone(), data.clone()) {
state::send_message(users, guild, data.serialize()); state::send_message(users, guild, data.serialize());
......
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment