class Nsqrb::Parser
Constants
- FRAME_TYPES
Frame
types- FRAME_TYPE_SIZE
- INFO_SIZE
Public Class Methods
new()
click to toggle source
# File lib/nsqrb/parser.rb, line 14 def initialize @buffer = [] end
Public Instance Methods
add(bytes)
click to toggle source
# File lib/nsqrb/parser.rb, line 18 def add(bytes) bytes = bytes.split('') if bytes.is_a?(String) @buffer += bytes end
parse()
click to toggle source
Parse all frames from current buffer @return Array [Frame]
# File lib/nsqrb/parser.rb, line 25 def parse frames = [] loop do break if @buffer.length < INFO_SIZE size, type = @buffer[0, INFO_SIZE].join.unpack('l>l>') frame = { size: size - FRAME_TYPE_SIZE, type: type.to_i } break if @buffer.length < frame[:size] + INFO_SIZE frame[:data] = @buffer[INFO_SIZE, frame[:size]].join frames << build_frame(frame) @buffer.shift(INFO_SIZE + frame[:size]) end frames end
Private Instance Methods
build_frame(frame)
click to toggle source
# File lib/nsqrb/parser.rb, line 42 def build_frame(frame) raise "Unknown frame type: #{frame[:type]}" unless FRAME_TYPES.has_key?(frame[:type]) FRAME_TYPES[frame[:type]].new frame end