Class: Nsqrb::Parser
- Inherits:
-
Object
- Object
- Nsqrb::Parser
- Defined in:
- lib/nsqrb/parser.rb
Constant Summary collapse
- FRAME_TYPES =
Frame types
{ 0 => Frame::Response, 1 => Frame::Error, 2 => Frame::Message }
- FRAME_TYPE_SIZE =
4
- INFO_SIZE =
8
Instance Method Summary collapse
- #add(bytes) ⇒ Object
-
#initialize ⇒ Parser
constructor
A new instance of Parser.
-
#parse ⇒ Object
Parse all frames from current buffer.
Constructor Details
#initialize ⇒ Parser
Returns a new instance of Parser.
14 15 16 |
# File 'lib/nsqrb/parser.rb', line 14 def initialize @buffer = [] end |
Instance Method Details
#add(bytes) ⇒ Object
18 19 20 21 |
# File 'lib/nsqrb/parser.rb', line 18 def add(bytes) bytes = bytes.split('') if bytes.is_a?(String) @buffer += bytes end |
#parse ⇒ Object
Parse all frames from current buffer
25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# 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 |