Class NetworkCompression
- Namespace
- Moongate.Network.Compression
- Assembly
- Moongate.Network.dll
Handles outgoing packet compression for the network.
public static class NetworkCompression
- Inheritance
-
NetworkCompression
- Inherited Members
Fields
BufferSize
UO packets may not exceed 64kb in length
public const int BufferSize = 65536
Field Value
Methods
CalculateMaxCompressedSize(int)
Calculates the maximum size needed for the compressed output buffer. This provides a conservative estimate based on the worst-case compression scenario.
public static int CalculateMaxCompressedSize(int inputLength)
Parameters
inputLengthintLength of the input data to be compressed
Returns
- int
Maximum size in bytes needed for the compressed output buffer, or 0 if input is too large to compress
Compress(ReadOnlySpan<byte>, Span<byte>)
Compresses input data using Huffman compression algorithm.
public static int Compress(ReadOnlySpan<byte> input, Span<byte> output)
Parameters
inputReadOnlySpan<byte>Input data to compress
outputSpan<byte>Output buffer for compressed data
Returns
- int
Number of bytes written to output buffer, or 0 if compression failed
CompressToMemory(ReadOnlyMemory<byte>)
Compresses input data and returns the result as a new Memory<T> of bytes. This method allocates a new buffer for the compressed output.
public static Memory<byte> CompressToMemory(ReadOnlyMemory<byte> input)
Parameters
inputReadOnlyMemory<byte>Input data to compress
Returns
Decompress(ReadOnlySpan<byte>, Span<byte>)
Decompresses Huffman-compressed data.
public static int Decompress(ReadOnlySpan<byte> input, Span<byte> output)
Parameters
inputReadOnlySpan<byte>Compressed input data
outputSpan<byte>Output buffer for decompressed data
Returns
- int
Number of bytes written to output buffer, or 0 if decompression failed
DecompressToMemory(ReadOnlyMemory<byte>, int)
Decompresses data and returns the result as a new Memory<T> of bytes.
public static Memory<byte> DecompressToMemory(ReadOnlyMemory<byte> input, int maxOutputSize = 65536)
Parameters
inputReadOnlyMemory<byte>Compressed input data
maxOutputSizeintMaximum expected size of decompressed data
Returns
IsCompressed(ReadOnlySpan<byte>)
Checks if data appears to be compressed by looking for huffman patterns. This is a heuristic check and may not be 100% accurate.
public static bool IsCompressed(ReadOnlySpan<byte> data)
Parameters
dataReadOnlySpan<byte>Data to check
Returns
- bool
True if data appears to be compressed
ProcessReceive(ref ReadOnlyMemory<byte>, out ReadOnlyMemory<byte>)
Main processing method compatible with ProcessReceive interface. Attempts to decompress data, with fallback handling.
public static (bool halt, int consumedFromOrigin) ProcessReceive(ref ReadOnlyMemory<byte> input, out ReadOnlyMemory<byte> output)
Parameters
inputReadOnlyMemory<byte>Input data to process
outputReadOnlyMemory<byte>Processed output data
Returns
- (bool halt, int consumedFromOrigin)
Tuple indicating if processing should halt and bytes consumed
ProcessReceiveWithFlag(ref ReadOnlyMemory<byte>, bool, out ReadOnlyMemory<byte>)
Advanced ProcessReceive with explicit compression flag. Use this when you have a header or flag indicating compression status.
public static (bool halt, int consumedFromOrigin) ProcessReceiveWithFlag(ref ReadOnlyMemory<byte> input, bool isCompressed, out ReadOnlyMemory<byte> output)
Parameters
inputReadOnlyMemory<byte>Input data to process
isCompressedboolFlag indicating if data is compressed
outputReadOnlyMemory<byte>Processed output data
Returns
- (bool halt, int consumedFromOrigin)
Tuple indicating if processing should halt and bytes consumed
ProcessSend(ref ReadOnlyMemory<byte>, out ReadOnlyMemory<byte>)
Main processing method compatible with ProcessSend interface. Compresses data if beneficial, otherwise returns original data.
public static void ProcessSend(ref ReadOnlyMemory<byte> input, out ReadOnlyMemory<byte> output)
Parameters
inputReadOnlyMemory<byte>Input data to process
outputReadOnlyMemory<byte>Processed output data
ShouldCompress(int)
Checks if the input data is worth compressing based on size thresholds.
public static bool ShouldCompress(int inputLength)
Parameters
inputLengthintLength of input data
Returns
- bool
True if compression should be attempted, false otherwise
TryCompress(ReadOnlyMemory<byte>, Span<byte>, out Memory<byte>)
Attempts to compress input data in-place using a provided buffer. Returns true if compression was successful and beneficial.
public static bool TryCompress(ReadOnlyMemory<byte> input, Span<byte> buffer, out Memory<byte> compressed)
Parameters
inputReadOnlyMemory<byte>Input data to compress
bufferSpan<byte>Working buffer for compression (should be at least CalculateMaxCompressedSize bytes)
compressedMemory<byte>Output compressed data if successful
Returns
- bool
True if compression was successful and beneficial, false otherwise
TryDecompress(ReadOnlyMemory<byte>, Span<byte>, out Memory<byte>)
Attempts to decompress data using a provided buffer.
public static bool TryDecompress(ReadOnlyMemory<byte> input, Span<byte> buffer, out Memory<byte> decompressed)
Parameters
inputReadOnlyMemory<byte>Compressed input data
bufferSpan<byte>Output buffer for decompressed data
decompressedMemory<byte>Decompressed data if successful
Returns
- bool
True if decompression was successful