use std::sync::atomic::{AtomicI32, Ordering};
use std::sync::Arc;
use super::id_generator::ClientIdManager;
use crate::connection::ConnectionMetadata;
#[derive(Debug)]
pub(crate) struct ServerVersion(AtomicI32);
impl ServerVersion {
pub(crate) fn new(version: i32) -> Self {
Self(AtomicI32::new(version))
}
pub(crate) fn get(&self) -> i32 {
self.0.load(Ordering::Acquire)
}
fn set(&self, version: i32) {
self.0.store(version, Ordering::Release);
}
}
#[derive(Debug)]
pub(crate) struct HandshakeState {
pub(crate) order_ids: Arc<ClientIdManager>,
pub(crate) server_version: Arc<ServerVersion>,
}
impl HandshakeState {
pub(crate) fn refresh(&self, metadata: &ConnectionMetadata) {
self.order_ids.raise_order_id_from_server(metadata.next_order_id);
self.server_version.set(metadata.server_version);
}
}
#[cfg(test)]
#[path = "handshake_state_tests.rs"]
mod tests;