Class: Riak::Client::BeefcakeProtobuffsBackend::Protocol
- Includes:
- Util::Translation
- Defined in:
- lib/riak/client/beefcake/protocol.rb
Instance Attribute Summary collapse
-
#socket ⇒ Object
readonly
Returns the value of attribute socket.
Instance Method Summary collapse
-
#expect(code, decoder_class = nil, options = { }) ⇒ Beefcake::Message, :empty
Receives a Riak-formatted message, checks the symbolic name against the given code, decodes it if it matches, and can optionally return success if the payload is empty.
-
#initialize(socket) ⇒ Protocol
constructor
A new instance of Protocol.
-
#receive ⇒ Array<Symbol, String>
Receives a Riak-formatted message, and returns the symbolic name of the message along with the string payload from the network.
-
#write(code, message = nil) ⇒ Object
Encodes and writes a Riak-formatted message, including protocol buffer payload if given.
Methods included from Util::Translation
Constructor Details
#initialize(socket) ⇒ Protocol
13 14 15 |
# File 'lib/riak/client/beefcake/protocol.rb', line 13 def initialize(socket) @socket = socket end |
Instance Attribute Details
#socket ⇒ Object (readonly)
Returns the value of attribute socket
11 12 13 |
# File 'lib/riak/client/beefcake/protocol.rb', line 11 def socket @socket end |
Instance Method Details
#expect(code, decoder_class = nil, options = { }) ⇒ Beefcake::Message, :empty
Receives a Riak-formatted message, checks the symbolic name against the given code, decodes it if it matches, and can optionally return success if the payload is empty.
74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 |
# File 'lib/riak/client/beefcake/protocol.rb', line 74 def expect(code, decoder_class = nil, = { }) code = BeefcakeMessageCodes[code] unless code.is_a? Symbol name, body = receive if name == :ErrorResp raise ProtobuffsErrorResponse.new RpbErrorResp.decode(body) end if name != code raise ProtobuffsUnexpectedResponse.new name, code end return true if decoder_class.nil? return :empty if body.nil? && [:empty_body_acceptable] return decoder_class.decode body end |
#receive ⇒ Array<Symbol, String>
Receives a Riak-formatted message, and returns the symbolic name of the message along with the string payload from the network.
43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/riak/client/beefcake/protocol.rb', line 43 def receive header = socket.read 5 raise ProtobuffsFailedHeader.new if header.nil? , code = header.unpack 'NC' body_length = - 1 body = nil body = socket.read body_length if body_length > 0 name = BeefcakeMessageCodes[code] return name, body end |
#write(code, message = nil) ⇒ Object
Encodes and writes a Riak-formatted message, including protocol buffer payload if given.
24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/riak/client/beefcake/protocol.rb', line 24 def write(code, = nil) if code.is_a? Symbol code = BeefcakeMessageCodes.index code end serialized = serialize header = [serialized.length + 1, code].pack 'NC' payload = header + serialized socket.write payload socket.flush end |