Class: Cql::Protocol::FrameEncoder

Inherits:
Object
  • Object
show all
Defined in:
lib/cql/protocol/frame_encoder.rb

Instance Method Summary collapse

Constructor Details

#initialize(compressor = nil) ⇒ FrameEncoder

Returns a new instance of FrameEncoder.



6
7
8
# File 'lib/cql/protocol/frame_encoder.rb', line 6

def initialize(compressor=nil)
  @compressor = compressor
end

Instance Method Details

#change_stream_id(new_stream_id, buffer, offset = 0) ⇒ Object



26
27
28
# File 'lib/cql/protocol/frame_encoder.rb', line 26

def change_stream_id(new_stream_id, buffer, offset=0)
  buffer.update(offset + 2, new_stream_id.chr)
end

#encode_frame(request, stream_id = 0, buffer = nil) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/cql/protocol/frame_encoder.rb', line 10

def encode_frame(request, stream_id=0, buffer=nil)
  raise InvalidStreamIdError, 'The stream ID must be between 0 and 127' unless 0 <= stream_id && stream_id < 128
  buffer ||= ByteBuffer.new
  offset = buffer.bytesize
  flags = request.trace? ? 2 : 0
  body = request.write(ByteBuffer.new)
  if @compressor && request.compressable? && @compressor.compress?(body)
    flags |= 1
    body = @compressor.compress(body)
  end
  header = [1, flags, stream_id, request.opcode, body.bytesize]
  buffer << header.pack(Formats::HEADER_FORMAT)
  buffer << body
  buffer
end