Fixed client overload

This commit is contained in:
2025-10-05 11:11:56 +02:00
parent a265c19870
commit a52cac159a
+12 -7
View File
@@ -11,8 +11,8 @@ use serde::{Deserialize, Serialize};
use crate::types::{ClientMessage, WsMessage}; use crate::types::{ClientMessage, WsMessage};
pub mod handshake { pub mod handshake {
use base64::Engine;
use base64::engine::general_purpose::STANDARD as Base64; use base64::engine::general_purpose::STANDARD as Base64;
use base64::Engine;
use sha1::{Digest, Sha1}; use sha1::{Digest, Sha1};
use std::collections::HashMap; use std::collections::HashMap;
use std::io::{BufRead, BufReader, Write}; use std::io::{BufRead, BufReader, Write};
@@ -100,13 +100,13 @@ pub mod handshake {
} }
} }
pub struct Client(TcpStream, Option<u32>); pub struct Client(TcpStream, Option<u32>, u64);
impl Client { impl Client {
/// Create a client with no timeouts /// Create a client with no timeouts
pub fn new(mut stream: TcpStream) -> crate::Result<Self> { pub fn new(mut stream: TcpStream) -> crate::Result<Self> {
handshake::handle_websocket_handshake(&mut stream)?; handshake::handle_websocket_handshake(&mut stream)?;
Ok(Client(stream, None)) Ok(Client(stream, None, rand::random()))
} }
/// Create a client and set read/write timeouts (useful in prod) /// Create a client and set read/write timeouts (useful in prod)
@@ -122,7 +122,7 @@ impl Client {
stream.set_write_timeout(Some(t))?; stream.set_write_timeout(Some(t))?;
} }
handshake::handle_websocket_handshake(&mut stream)?; handshake::handle_websocket_handshake(&mut stream)?;
Ok(Client(stream, None)) Ok(Client(stream, None, rand::random()))
} }
/// Send a close frame and flush. `code` is a WebSocket close code (e.g., 1000 normal). /// Send a close frame and flush. `code` is a WebSocket close code (e.g., 1000 normal).
@@ -332,6 +332,7 @@ impl Client {
self.1 = Some(uuid) self.1 = Some(uuid)
} }
#[deprecated]
pub fn addr(&self) -> crate::Result<SocketAddr> { pub fn addr(&self) -> crate::Result<SocketAddr> {
Ok(self.0.peer_addr().unwrap_or(self.0.local_addr()?)) Ok(self.0.peer_addr().unwrap_or(self.0.local_addr()?))
} }
@@ -339,13 +340,17 @@ impl Client {
impl Clone for Client { impl Clone for Client {
fn clone(&self) -> Self { fn clone(&self) -> Self {
Client(self.0.try_clone().expect("failed to clone TcpStream"), None) Client(
self.0.try_clone().expect("failed to clone TcpStream"),
self.1.clone(),
self.2.clone(),
)
} }
} }
impl PartialEq for Client { impl PartialEq for Client {
fn eq(&self, other: &Self) -> bool { fn eq(&self, other: &Self) -> bool {
self.addr().unwrap() == other.addr().unwrap() self.2 == other.2
} }
} }
@@ -353,6 +358,6 @@ impl Eq for Client {}
impl Hash for Client { impl Hash for Client {
fn hash<H: Hasher>(&self, state: &mut H) { fn hash<H: Hasher>(&self, state: &mut H) {
self.addr().unwrap().hash(state); self.2.hash(state);
} }
} }