let pu = &mut ig.updates.get(self.player)
.ok_or_else(|| em("player gonee"))?;
- let cv = loop {
- let next = match pu.get_or_cv(self.to_send) {
- Ok(next) => next, Err(cv) => { break cv }
+ loop {
+ let next = match pu.read_log().get(self.to_send) {
+ Some(next) => next, None => { break }
};
let next_len = UPDATE_MAX_FRAMING_SIZE + next.json_len();
- if next_len > buf.len() { break pu.get_cv() }
+ if next_len > buf.len() { break }
let tu = next.for_transmit(self.client);
// xxx handle overflow by allocating
id: {}\n\n",
&self.to_send)?;
self.to_send.try_increment().unwrap();
- };
+ }
+ let cv = pu.get_cv();
loop {
let generated = orig_wanted - buf.len();
self.cv.notify_all();
}
pub fn read_log(&self) -> &PlayerUpdatesLog { &self.log }
-
- pub fn get_or_cv(&self, index: sse::UpdateId)
- -> Result<&Arc<PreparedUpdate>,Arc<Condvar>> {
- self.log.get(index).ok_or_else(|| self.cv.clone())
- }
pub fn get_cv(&self) -> Arc<Condvar> { self.cv.clone() }
}