remove events
authoralfadur
Sat, 25 Mar 2023 04:14:07 +0300
changeset 15939 4a8e6f9d5133
parent 15938 ce47259d5c86
child 15940 ea370bfda705
remove events
rust/hedgewars-server/src/core.rs
rust/hedgewars-server/src/core/events.rs
rust/hedgewars-server/src/server/network.rs
--- a/rust/hedgewars-server/src/core.rs	Sat Mar 25 04:00:30 2023 +0300
+++ b/rust/hedgewars-server/src/core.rs	Sat Mar 25 04:14:07 2023 +0300
@@ -1,6 +1,5 @@
 pub mod anteroom;
 pub mod client;
-pub mod events;
 pub mod indexslab;
 pub mod room;
 pub mod server;
--- a/rust/hedgewars-server/src/core/events.rs	Sat Mar 25 04:00:30 2023 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,116 +0,0 @@
-use slab::Slab;
-use std::{
-    convert::TryInto,
-    iter,
-    num::NonZeroU32,
-    time::{Duration, Instant},
-};
-
-struct Event<Data> {
-    event_id: u32,
-    data: Data,
-}
-
-#[derive(Clone)]
-pub struct Timeout {
-    tick_index: u32,
-    event_index: u32,
-    event_id: u32,
-}
-
-pub struct TimedEvents<Data, const MAX_TIMEOUT: usize> {
-    events: [Slab<Event<Data>>; MAX_TIMEOUT],
-    current_time: Instant,
-    current_tick_index: u32,
-    next_event_id: u32,
-    events_count: u32,
-}
-
-impl<Data, const MAX_TIMEOUT: usize> TimedEvents<Data, MAX_TIMEOUT> {
-    pub fn new() -> Self {
-        Self {
-            events: [0; MAX_TIMEOUT].map(|_| Slab::new()),
-            current_time: Instant::now(),
-            current_tick_index: 0,
-            next_event_id: 0,
-            events_count: 0,
-        }
-    }
-
-    pub fn set_timeout(&mut self, seconds_delay: NonZeroU32, data: Data) -> Timeout {
-        let tick_index = (self.current_tick_index
-            + std::cmp::min(seconds_delay.get(), MAX_TIMEOUT as u32))
-            % MAX_TIMEOUT as u32;
-        let event_id = self.next_event_id;
-        self.next_event_id += 1;
-        let event = Event { event_id, data };
-
-        let entry = self.events[tick_index as usize].vacant_entry();
-        let event_index = entry.key() as u32;
-        entry.insert(event);
-
-        self.events_count += 1;
-
-        Timeout {
-            tick_index,
-            event_index,
-            event_id,
-        }
-    }
-
-    pub fn cancel_timeout(&mut self, timeout: Timeout) -> Option<Data> {
-        let events = &mut self.events[timeout.tick_index as usize];
-        if matches!(events.get(timeout.event_index as usize), Some(Event { event_id: id, ..}) if *id == timeout.event_id)
-        {
-            self.events_count -= 1;
-            Some(events.remove(timeout.event_index as usize).data)
-        } else {
-            None
-        }
-    }
-
-    pub fn poll(&mut self, time: Instant) -> Vec<Data> {
-        let mut result = vec![];
-        let second = Duration::from_secs(1);
-        while time - self.current_time > second {
-            self.current_time += second;
-            self.current_tick_index = (self.current_tick_index + 1) % MAX_TIMEOUT as u32;
-            result.extend(
-                self.events[self.current_tick_index as usize]
-                    .drain()
-                    .map(|e| e.data),
-            );
-        }
-        self.events_count -= result.len() as u32;
-        result
-    }
-
-    pub fn is_empty(&self) -> bool {
-        self.events_count == 0
-    }
-}
-
-mod test {
-    use super::TimedEvents;
-    use std::{
-        num::NonZeroU32,
-        time::{Duration, Instant},
-    };
-
-    #[test]
-    fn events_test() {
-        let mut events = TimedEvents::<u32, 30>::new();
-        let now = Instant::now();
-
-        let timeouts = (1..=3)
-            .map(|n| events.set_timeout(NonZeroU32::new(n).unwrap(), n))
-            .collect::<Vec<_>>();
-
-        let second = Duration::from_secs(1);
-        assert_eq!(events.cancel_timeout(timeouts[1].clone()), Some(2));
-        assert_eq!(events.poll(now + second), vec![1]);
-        assert!(events.poll(now + second).is_empty());
-        assert!(events.poll(now + 2 * second).is_empty());
-        assert_eq!(events.poll(now + 3 * second), vec![3]);
-    }
-}
--- a/rust/hedgewars-server/src/server/network.rs	Sat Mar 25 04:00:30 2023 +0300
+++ b/rust/hedgewars-server/src/server/network.rs	Sat Mar 25 04:14:07 2023 +0300
@@ -18,10 +18,7 @@
 use tokio_native_tls::{TlsAcceptor, TlsStream};
 
 use crate::{
-    core::{
-        events::{TimedEvents, Timeout},
-        types::ClientId,
-    },
+    core::types::ClientId,
     handlers,
     handlers::{IoResult, IoTask, ServerState},
     protocol::{self, ProtocolDecoder, ProtocolError},