a43d183b4f
* Compiles but runtime time fails * wip * Beginning of clean-up - creation of config to keep things together * Removed unused module * Removed hardcoded constants * Easier way of sending binary messages * WIP cleanup before machine switch * Upgrade wasm-bindgen to 0.2.83 * Fixed compilation warnings for wasm client * all clients compiling without warnings * disabling topology refresh in wasm * Added a config option to disable loop cover traffic stream * config changes * Make webassembly work in a web worker - `wasm-timer` modified to work in web worker - add worker target to webpack - add client to call from HTML - update README to build WASM for bundling (this does not build ES modules) * Restored topology refreshing * correctly polling items in the wasm delay_queue * Allow client to read up to 8 messages at once from gateway connection (#1669) * Allow client to read up to 8 messages at once from gateway connection * Importing tokio::select in wasm32 target * Updated changelog * missing imports * Introduced disable_main_poisson_packet_distribution to force real_traffic_stream to disable poisson sending (#1664) * Introduced disable_main_poisson_packet_distribution to force real_traffic_stream to disable poisson sending * Updated changelog * Adjusting default settings * Introduced a client-configurable option to force it to use extended packet size * local adjustments * Removed warning associated with receiving extended packets * Minimal v2-required changes * Updated changelog * explicitly allowing clippy drop_non_drop Co-authored-by: Mark Sinclair <mmsinclair@gmail.com>
43 lines
934 B
Rust
43 lines
934 B
Rust
use std::time::Duration;
|
|
|
|
mod wheel;
|
|
|
|
pub mod delay_queue;
|
|
|
|
#[doc(inline)]
|
|
pub use delay_queue::DelayQueue;
|
|
|
|
// ===== Internal utils =====
|
|
|
|
enum Round {
|
|
Up,
|
|
Down,
|
|
}
|
|
|
|
/// Convert a `Duration` to milliseconds, rounding up and saturating at
|
|
/// `u64::MAX`.
|
|
///
|
|
/// The saturating is fine because `u64::MAX` milliseconds are still many
|
|
/// million years.
|
|
#[inline]
|
|
fn ms(duration: Duration, round: Round) -> u64 {
|
|
const NANOS_PER_MILLI: u32 = 1_000_000;
|
|
const MILLIS_PER_SEC: u64 = 1_000;
|
|
|
|
// Round up.
|
|
let millis = match round {
|
|
Round::Up => (duration.subsec_nanos() + NANOS_PER_MILLI - 1) / NANOS_PER_MILLI,
|
|
Round::Down => duration.subsec_millis(),
|
|
};
|
|
|
|
duration
|
|
.as_secs()
|
|
.saturating_mul(MILLIS_PER_SEC)
|
|
.saturating_add(u64::from(millis))
|
|
}
|
|
|
|
#[inline]
|
|
fn sleep_until(deadline: wasm_timer::Instant) -> wasm_timer::Delay {
|
|
wasm_timer::Delay::new_at(deadline)
|
|
}
|