class Deflate
Compresses outgoing WebSocket frames using the DEFLATE algorithm.
Definitions
def self.client(parent, client_max_window_bits: 15, client_no_context_takeover: false, **options)
Client writing to server.
Implementation
def self.client(parent, client_max_window_bits: 15, client_no_context_takeover: false, **options)
self.new(parent,
window_bits: client_max_window_bits,
context_takeover: !client_no_context_takeover,
**options
)
end
def self.server(parent, server_max_window_bits: 15, server_no_context_takeover: false, **options)
Server writing to client.
Implementation
def self.server(parent, server_max_window_bits: 15, server_no_context_takeover: false, **options)
self.new(parent,
window_bits: server_max_window_bits,
context_takeover: !server_no_context_takeover,
**options
)
end
def initialize(parent, level: Zlib::DEFAULT_COMPRESSION, memory_level: Zlib::DEF_MEM_LEVEL, strategy: Zlib::DEFAULT_STRATEGY, window_bits: 15, context_takeover: true, **options)
Initialize a new deflate compressor.
Signature
-
parameter
parentObject The parent framer to wrap.
-
parameter
levelInteger The compression level. Defaults to
Zlib::DEFAULT_COMPRESSION.-
parameter
memory_levelInteger The memory level for compression. Defaults to
Zlib::DEF_MEM_LEVEL.-
parameter
strategyInteger The compression strategy. Defaults to
Zlib::DEFAULT_STRATEGY.-
parameter
window_bitsInteger The window size in bits for the DEFLATE algorithm.
-
parameter
context_takeoverBoolean Whether to reuse the compression context across messages.
Implementation
def initialize(parent, level: Zlib::DEFAULT_COMPRESSION, memory_level: Zlib::DEF_MEM_LEVEL, strategy: Zlib::DEFAULT_STRATEGY, window_bits: 15, context_takeover: true, **options)
@parent = parent
@deflate = nil
@level = level
@memory_level = memory_level
@strategy = strategy
# This is handled during negotiation:
# if window_bits < MINIMUM_WINDOW_BITS
# window_bits = MINIMUM_WINDOW_BITS
# end
@window_bits = window_bits
@context_takeover = context_takeover
end
def to_s
Signature
-
returns
String A string representation including window bits and context takeover settings.
Implementation
def to_s
"#<#{self.class} window_bits=#{@window_bits} context_takeover=#{@context_takeover}>"
end
attr :window_bits
Signature
-
attribute
Integer The window size in bits used for compression.
attr :context_takeover
Signature
-
attribute
Boolean Whether the compression context is reused across messages.
def pack_text_frame(buffer, compress: true, **options)
Pack a text frame, optionally compressing the buffer.
Signature
-
parameter
bufferString The text payload to pack.
-
parameter
compressBoolean Whether to compress the buffer. Defaults to
true.-
returns
Frame The packed (and optionally compressed) text frame.
Implementation
def pack_text_frame(buffer, compress: true, **options)
if compress
buffer = self.deflate(buffer)
end
frame = @parent.pack_text_frame(buffer, **options)
if compress
frame.flags |= Frame::RSV1
end
return frame
end
def pack_binary_frame(buffer, compress: false, **options)
Pack a binary frame, optionally compressing the buffer.
Signature
-
parameter
bufferString The binary payload to pack.
-
parameter
compressBoolean Whether to compress the buffer. Defaults to
false.-
returns
Frame The packed (and optionally compressed) binary frame.
Implementation
def pack_binary_frame(buffer, compress: false, **options)
if compress
buffer = self.deflate(buffer)
end
frame = @parent.pack_binary_frame(buffer, **options)
if compress
frame.flags |= Frame::RSV1
end
return frame
end