|
|
|
@ -164,9 +164,10 @@ impl Sending { |
|
|
|
// Find events that have been added since starting the last request
|
|
|
|
// Find events that have been added since starting the last request
|
|
|
|
let new_events = guard.sending.servernamepduids |
|
|
|
let new_events = guard.sending.servernamepduids |
|
|
|
.scan_prefix(prefix.clone()) |
|
|
|
.scan_prefix(prefix.clone()) |
|
|
|
.map(|(k, _)| { |
|
|
|
.filter_map(|(k, _)| { |
|
|
|
SendingEventType::Pdu(k[prefix.len()..].to_vec()) |
|
|
|
Self::parse_servercurrentevent(&k).ok() |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
.map(|(_, event)| event) |
|
|
|
.take(30) |
|
|
|
.take(30) |
|
|
|
.collect::<Vec<_>>(); |
|
|
|
.collect::<Vec<_>>(); |
|
|
|
|
|
|
|
|
|
|
|
@ -290,7 +291,14 @@ impl Sending { |
|
|
|
|
|
|
|
|
|
|
|
if let OutgoingKind::Normal(server_name) = outgoing_kind { |
|
|
|
if let OutgoingKind::Normal(server_name) = outgoing_kind { |
|
|
|
if let Ok((select_edus, last_count)) = Self::select_edus(db, server_name) { |
|
|
|
if let Ok((select_edus, last_count)) = Self::select_edus(db, server_name) { |
|
|
|
events.extend_from_slice(&select_edus); |
|
|
|
for edu in &select_edus { |
|
|
|
|
|
|
|
let mut full_key = vec![b'*']; |
|
|
|
|
|
|
|
full_key.extend_from_slice(&edu); |
|
|
|
|
|
|
|
db.sending.servercurrentevents.insert(&full_key, &[])?; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
events.extend(select_edus.into_iter().map(SendingEventType::Edu)); |
|
|
|
|
|
|
|
|
|
|
|
db.sending |
|
|
|
db.sending |
|
|
|
.servername_educount |
|
|
|
.servername_educount |
|
|
|
.insert(server_name.as_bytes(), &last_count.to_be_bytes())?; |
|
|
|
.insert(server_name.as_bytes(), &last_count.to_be_bytes())?; |
|
|
|
@ -301,7 +309,7 @@ impl Sending { |
|
|
|
Ok(Some(events)) |
|
|
|
Ok(Some(events)) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
pub fn select_edus(db: &Database, server: &ServerName) -> Result<(Vec<SendingEventType>, u64)> { |
|
|
|
pub fn select_edus(db: &Database, server: &ServerName) -> Result<(Vec<Vec<u8>>, u64)> { |
|
|
|
// u64: count of last edu
|
|
|
|
// u64: count of last edu
|
|
|
|
let since = db |
|
|
|
let since = db |
|
|
|
.sending |
|
|
|
.sending |
|
|
|
@ -366,9 +374,7 @@ impl Sending { |
|
|
|
} |
|
|
|
} |
|
|
|
}; |
|
|
|
}; |
|
|
|
|
|
|
|
|
|
|
|
events.push(SendingEventType::Edu( |
|
|
|
events.push(serde_json::to_vec(&federation_event).expect("json can be serialized")); |
|
|
|
serde_json::to_vec(&federation_event).expect("json can be serialized"), |
|
|
|
|
|
|
|
)); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if events.len() >= 20 { |
|
|
|
if events.len() >= 20 { |
|
|
|
break 'outer; |
|
|
|
break 'outer; |
|
|
|
@ -402,6 +408,18 @@ impl Sending { |
|
|
|
Ok(()) |
|
|
|
Ok(()) |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#[tracing::instrument(skip(self))] |
|
|
|
|
|
|
|
pub fn send_reliable_edu(&self, server: &ServerName, serialized: &[u8]) -> Result<()> { |
|
|
|
|
|
|
|
let mut key = server.as_bytes().to_vec(); |
|
|
|
|
|
|
|
key.push(0xff); |
|
|
|
|
|
|
|
key.push(b'*'); |
|
|
|
|
|
|
|
key.extend_from_slice(serialized); |
|
|
|
|
|
|
|
self.servernamepduids.insert(&key, b"")?; |
|
|
|
|
|
|
|
self.sender.unbounded_send(key).unwrap(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Ok(()) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
#[tracing::instrument(skip(self))] |
|
|
|
#[tracing::instrument(skip(self))] |
|
|
|
pub fn send_pdu_appservice(&self, appservice_id: &str, pdu_id: &[u8]) -> Result<()> { |
|
|
|
pub fn send_pdu_appservice(&self, appservice_id: &str, pdu_id: &[u8]) -> Result<()> { |
|
|
|
let mut key = b"+".to_vec(); |
|
|
|
let mut key = b"+".to_vec(); |
|
|
|
|