rust/lib-hedgewars-engine/src/ipc/queue.rs
changeset 15289 ae8e14d14596
parent 15287 478d5372eb4a
child 15290 6382a14c9e83
--- a/rust/lib-hedgewars-engine/src/ipc/queue.rs	Tue Jul 30 22:59:06 2019 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,115 +0,0 @@
-use hedgewars_engine_messages::{
-    messages::EngineMessage::*, messages::SyncedEngineMessage::*,
-    messages::UnsyncedEngineMessage::*, messages::*,
-};
-use queues::*;
-
-#[derive(PartialEq)]
-pub enum QueueChatStrategy {
-    NetworkGame,
-    LocalGame,
-}
-
-pub struct MessagesQueue {
-    strategy: QueueChatStrategy,
-    hi_ticks: u32,
-    unordered: Queue<EngineMessage>,
-    ordered: Queue<EngineMessage>,
-}
-
-impl MessagesQueue {
-    pub fn new(strategy: QueueChatStrategy) -> Self {
-        MessagesQueue {
-            strategy,
-            hi_ticks: 0,
-            unordered: queue![],
-            ordered: queue![],
-        }
-    }
-
-    fn is_unordered(&self, message: &EngineMessage) -> bool {
-        match message {
-            Unordered(_) => true,
-            Unsynced(HogSay(_)) | Unsynced(ChatMessage(_)) | Unsynced(TeamMessage(_)) => {
-                self.strategy == QueueChatStrategy::NetworkGame
-            }
-            _ => false,
-        }
-    }
-
-    pub fn push(&mut self, engine_message: EngineMessage) {
-        if self.is_unordered(&engine_message) {
-            self.unordered.add(engine_message).unwrap();
-        } else if let Synced(TimeWrap, timestamp) = engine_message {
-            self.ordered
-                .add(Synced(TimeWrap, timestamp + self.hi_ticks))
-                .unwrap();
-            self.hi_ticks += 65536;
-        } else if let Synced(message, timestamp) = engine_message {
-            self.ordered
-                .add(Synced(message, timestamp + self.hi_ticks))
-                .unwrap();
-        } else {
-            self.ordered.add(engine_message).unwrap();
-        }
-    }
-
-    pub fn pop(&mut self, timestamp: u32) -> Option<EngineMessage> {
-        if let Ok(message) = self.unordered.remove() {
-            Some(message)
-        } else if let Ok(Synced(_, message_timestamp)) = self.ordered.peek() {
-            if message_timestamp == timestamp {
-                self.ordered.remove().ok()
-            } else {
-                None
-            }
-        } else {
-            self.ordered.remove().ok()
-        }
-    }
-
-    pub fn iter(&mut self, timestamp: u32) -> MessagesQueueIterator {
-        MessagesQueueIterator {
-            timestamp,
-            queue: self,
-        }
-    }
-}
-
-pub struct MessagesQueueIterator<'a> {
-    timestamp: u32,
-    queue: &'a mut MessagesQueue,
-}
-
-impl<'a> Iterator for MessagesQueueIterator<'a> {
-    type Item = EngineMessage;
-
-    fn next(&mut self) -> Option<EngineMessage> {
-        self.queue.pop(self.timestamp)
-    }
-}
-
-#[test]
-fn queue_order() {
-    use hedgewars_engine_messages::messages::UnorderedEngineMessage::*;
-
-    let mut queue = MessagesQueue::new(QueueChatStrategy::LocalGame);
-
-    queue.push(Synced(Skip, 1));
-    queue.push(Unsynced(ChatMessage("hi".to_string())));
-    queue.push(Synced(TimeWrap, 65535));
-    queue.push(Unordered(Ping));
-    queue.push(Synced(Skip, 2));
-
-    let zero_tick: Vec<EngineMessage> = queue.iter(0).collect();
-    assert_eq!(zero_tick, vec![Unordered(Ping)]);
-    assert_eq!(queue.pop(1), Some(Synced(Skip, 1)));
-    assert_eq!(queue.pop(1), Some(Unsynced(ChatMessage("hi".to_string()))));
-    assert_eq!(queue.pop(1), None);
-    assert_eq!(queue.pop(2), None);
-    assert_eq!(queue.pop(65535), Some(Synced(TimeWrap, 65535)));
-    assert_eq!(queue.pop(65535), None);
-    assert_eq!(queue.pop(65538), Some(Synced(Skip, 65538)));
-    assert_eq!(queue.pop(65538), None);
-    assert_eq!(queue.pop(65539), None);
-}