diff --git a/degeon_core/src/degeon_worker.rs b/degeon_core/src/degeon_worker.rs index 3e2299d..1af7fa3 100644 --- a/degeon_core/src/degeon_worker.rs +++ b/degeon_core/src/degeon_worker.rs @@ -343,18 +343,17 @@ impl Degeon { impl Stream for Degeon { type Item = GuiEvent; - fn poll_next(self: Pin<&mut Self>, _cx: &mut Context<'_>) -> Poll> { - if self.ironforce.try_lock().is_err() { - return Poll::Ready(Some(GuiEvent::None)); + fn poll_next(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll> { + if self.ironforce.lock().unwrap().messages.is_empty() { + let waker = cx.waker().clone(); + std::thread::spawn(move || { + std::thread::sleep(std::time::Duration::from_millis(1000)); + waker.wake(); + }); + return Poll::Pending; } let timestamp_0 = std::time::Instant::now(); let msg = self.read_message_and_create_event(); - if timestamp_0.elapsed() < std::time::Duration::from_millis(5) { - std::thread::sleep(std::time::Duration::from_millis(5)); - if rand::random::() { - return Poll::Pending; - } - } if timestamp_0.elapsed() > std::time::Duration::from_millis(800) { println!("Poll_next took {:?}", timestamp_0.elapsed()); } diff --git a/degeon_py/degeon.py b/degeon_py/degeon.py index 3926081..13a2da4 100644 --- a/degeon_py/degeon.py +++ b/degeon_py/degeon.py @@ -67,6 +67,8 @@ class Degeon: self.chat_selector.chats = self.core.chats if 0 <= self.chat_selector.active_chat < len(self.chat_selector.chats) and self.active_chat is None: self.active_chat = ActiveChat.new(self.chat_selector.chats[self.chat_selector.active_chat]) + if self.active_chat is not None: + self.active_chat.chat = self.core.chats[self.chat_selector.active_chat] def process_event(self, event: pygame.event.Event): """ diff --git a/degeon_py/degeon_core.so b/degeon_py/degeon_core.so index 59cb15e..cf8c38c 100755 Binary files a/degeon_py/degeon_core.so and b/degeon_py/degeon_core.so differ diff --git a/src/ironforce.rs b/src/ironforce.rs index 74d3a04..e1ce253 100644 --- a/src/ironforce.rs +++ b/src/ironforce.rs @@ -119,6 +119,7 @@ impl IronForce { /// Send a multicast or broadcast message pub fn send_to_all(&mut self, message: Message) -> IFResult<()> { + self.processed_messages.push(message.message_id); self.transport .send_message(serde_cbor::to_vec(&message)?, None) } @@ -130,6 +131,7 @@ impl IronForce { mut message: Message, direction: Option, ) -> IFResult<()> { + self.processed_messages.push(message.message_id); let tunnel: Tunnel = if let Some(tun) = self .tunnels .iter()