Module compress

Source
Available on crate feature compression only.
Expand description

Compression protocol. Without encryption.

With compression, you can reduce the size of the data sent by the server and the client.

Set the compression level by calling [tcp_handler::config::set_config].

§Example

use anyhow::Result;
use bytes::{Buf, BufMut, BytesMut};
use tcp_handler::protocols::compress::*;
use tokio::net::{TcpListener, TcpStream};
use variable_len_reader::{VariableReader, VariableWriter};

#[tokio::main]
async fn main() -> Result<()> {
    let server = TcpListener::bind("localhost:0").await?;
    let mut client = TcpStream::connect(server.local_addr()?).await?;
    let (mut server, _) = server.accept().await?;

    let c_init = client_init(&mut client, "test", "0").await;
    let s_init = server_init(&mut server, "test", |v| v == "0").await;
    server_start(&mut server, "test", "0", s_init).await?;
    client_start(&mut client, c_init).await?;

    let mut writer = BytesMut::new().writer();
    writer.write_string("hello server.")?;
    let mut bytes = writer.into_inner();
    send(&mut client, &mut bytes).await?;

    let mut reader = recv(&mut server).await?.reader();
    let message = reader.read_string()?;
    assert_eq!("hello server.", message);

    let mut writer = BytesMut::new().writer();
    writer.write_string("hello client.")?;
    let mut bytes = writer.into_inner();
    send(&mut server, &mut bytes).await?;

    let mut reader = recv(&mut client).await?.reader();
    let message = reader.read_string()?;
    assert_eq!("hello client.", message);

    Ok(())
}

The send process:

        ┌────┬────────┬────────────┐ (It may not be in contiguous memory.)
in  --> │ ** │ ****** │ ********** │
        └────┴────────┴────────────┘
          │
          │─ DeflateEncoder
          v
        ┌──────────────────┐ (Compressed bytes. In contiguous memory.)
out <-- │ **************** │
        └──────────────────┘

The recv process:

        ┌──────────────────┐ (Packet data.)
in  --> │ **************** │
        └──────────────────┘
          │
          │─ DeflateDecoder
          v
        ┌────────────────────┐ (Decompressed bytes.)
out <-- │ ****************** │
        └────────────────────┘

Functions§

client_init
Init the client side in tcp-handler compress protocol.
client_start
Make sure the client side is ready to use in tcp-handler compress protocol.
recv
Recv the message in tcp-handler compress protocol.
send
Send the message in tcp-handler compress protocol.
server_init
Init the server side in tcp-handler compress protocol.
server_start
Make sure the server side is ready to use in tcp-handler compress protocol.