Sha256: a36c87badd069c2a7baf590ac6631c95bd1baebe085ad1cdc3be42d398d07e4c

Contents?: true

Size: 1.4 KB

Versions: 30

Compression:

Stored size: 1.4 KB

Contents

require 'mongo/util/bson'
require 'mongo/util/byte_buffer'

module XGen
  module Mongo
    module Driver

      class Message

        HEADER_SIZE = 16        # size, id, response_to, opcode

        @@class_req_id = 0

        attr_reader :buf        # for testing

        def initialize(op)
          @op = op
          @message_length = HEADER_SIZE
          @data_length = 0
          @request_id = (@@class_req_id += 1)
          @response_id = 0
          @buf = ByteBuffer.new
          
          @buf.put_int(16)      # holder for length
          @buf.put_int(@request_id)
          @buf.put_int(0)       # response_to
          @buf.put_int(op)
        end

        def write_int(i)
          @buf.put_int(i)
          update_message_length
        end

        def write_long(i)
          @buf.put_long(i)
          update_message_length
        end

        def write_string(s)
          BSON.serialize_cstr(@buf, s)
          update_message_length
        end

        def write_doc(hash)
          @buf.put_array(BSON.new.serialize(hash).to_a)
          update_message_length
        end

        def to_a
          @buf.to_a
        end

        def dump
          @buf.dump
        end

        # Do not call. Private, but kept public for testing.
        def update_message_length
          pos = @buf.position
          @buf.put_int(@buf.size, 0)
          @buf.position = pos
        end

      end
    end
  end
end

Version data entries

30 entries across 30 versions & 2 rubygems

Version Path
mongodb-mongo-0.1.3 lib/mongo/message/message.rb
mongodb-mongo-0.1.4 lib/mongo/message/message.rb
mongodb-mongo-0.2.0 lib/mongo/message/message.rb
mongodb-mongo-0.2.1 lib/mongo/message/message.rb
mongodb-mongo-0.2.2 lib/mongo/message/message.rb
mongodb-mongo-0.2.3 lib/mongo/message/message.rb
mongodb-mongo-0.2.4 lib/mongo/message/message.rb
mongodb-mongo-0.2.5 lib/mongo/message/message.rb
mongodb-mongo-0.2.6 lib/mongo/message/message.rb
mongodb-mongo-0.2.7 lib/mongo/message/message.rb
mongodb-mongo-0.3.0 lib/mongo/message/message.rb
mongodb-mongo-0.3.1 lib/mongo/message/message.rb
mongodb-mongo-0.3.2 lib/mongo/message/message.rb
mongodb-mongo-0.3.3 lib/mongo/message/message.rb
mongodb-mongo-0.4.0 lib/mongo/message/message.rb
mongodb-mongo-0.4.1 lib/mongo/message/message.rb
mongodb-mongo-0.4.2 lib/mongo/message/message.rb
mongodb-mongo-0.4.3 lib/mongo/message/message.rb
mongodb-mongo-0.4.4 lib/mongo/message/message.rb
mongodb-mongo-0.5.0 lib/mongo/message/message.rb