pub(crate) struct TcpClient {
target: String,
tcp_receiver: Receiver<TcpClientMessage>,
tcp_sender: Sender<TcpServerMessage>,
}Expand description
Manages a persistent TCP connection to the kernel server.
The TcpClient encapsulates stream handles and channels. Upon starting, it spawns
separate background threads for non-blocking reading and writing of network messages.
Fields§
§target: String§tcp_receiver: Receiver<TcpClientMessage>§tcp_sender: Sender<TcpServerMessage>Implementations§
Source§impl TcpClient
impl TcpClient
Sourcepub(crate) fn new(
target: String,
tcp_receiver: Receiver<TcpClientMessage>,
tcp_sender: Sender<TcpServerMessage>,
) -> Self
pub(crate) fn new( target: String, tcp_receiver: Receiver<TcpClientMessage>, tcp_sender: Sender<TcpServerMessage>, ) -> Self
Creates a new TcpClient instance without starting it immediately.
§Arguments
target- The IP address or hostname of the target server (e.g., “127.0.0.1:6767”).tcp_receiver- Channel to receive outgoing messages from the UI.tcp_sender- Channel to forward incoming messages from the server to the UI controller.
Sourcefn set_connection_state(state: ConnectionState)
fn set_connection_state(state: ConnectionState)
Helper function to report a connection state change to the GUI controller.
Uses the global UI_EVENT_SENDER to trigger a UiEvent::SetConnectionState.
§Arguments
state- The new connection state to apply in the UI.
Sourcepub(crate) fn start_tcp_client(&mut self)
pub(crate) fn start_tcp_client(&mut self)
Starts the TCP client, performs the version handshake, and spawns the IO threads.
Establishes the TCP connection and sends a HandshakeRequest.
On a version mismatch (HandshakeResponse::Mismatch), the function aborts
and sets the GUI to an Error state. Otherwise, the read and write threads
are started in the background.
Sourcefn listen_tcp(
read_stream: TcpStream,
tcp_sender: Sender<TcpServerMessage>,
is_disconnecting: Arc<AtomicBool>,
)
fn listen_tcp( read_stream: TcpStream, tcp_sender: Sender<TcpServerMessage>, is_disconnecting: Arc<AtomicBool>, )
Background thread: Continuously reads incoming messages from the server.
Blocks while waiting for data, reads the 4-byte length prefix, loads the payload,
deserializes the TcpServerMessage, and forwards it to the UI controller
via the tcp_sender.
Sourcefn write_thread(
&self,
write_stream: TcpStream,
is_disconnecting: Arc<AtomicBool>,
)
fn write_thread( &self, write_stream: TcpStream, is_disconnecting: Arc<AtomicBool>, )
Background thread: Waits for outgoing messages from the GUI and sends them.
Receives messages from the tcp_receiver channel (blocking), serializes them
into bytes, and sends them with a length prefix over the outgoing TCP stream to the kernel.
Sourcefn close_tcp_connection(stream: &TcpStream)
fn close_tcp_connection(stream: &TcpStream)
Closes the TCP connection cleanly in both directions.
Using shutdown(Shutdown::Both) immediately interrupts traffic and
unblocks the reading thread so it can terminate gracefully.
Auto Trait Implementations§
impl !Sync for TcpClient
impl Freeze for TcpClient
impl RefUnwindSafe for TcpClient
impl Send for TcpClient
impl Unpin for TcpClient
impl UnsafeUnpin for TcpClient
impl UnwindSafe for TcpClient
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can
then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be
further downcast into Rc<ConcreteType> where ConcreteType implements Trait.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.