Sha256: 719fadac141952058236c831b19d2b664bbeb60503907a1ea1b89ad7e337ea8d

Contents?: true

Size: 1.78 KB

Versions: 6

Compression:

Stored size: 1.78 KB

Contents

# --
# Copyright (C) 2008-2009 10gen Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ++

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

module Mongo

  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, check_keys=false)
      @buf.put_array(BSON.new.serialize(hash, check_keys).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

Version data entries

6 entries across 6 versions & 3 rubygems

Version Path
mongodb-mongo-0.13 lib/mongo/message/message.rb
mongodb-mongo-0.14.1 lib/mongo/message/message.rb
mongodb-mongo-0.14 lib/mongo/message/message.rb
pahagon-mongo-abd-0.14.1 lib/mongo/message/message.rb
mongo-0.15.1 lib/mongo/message/message.rb
mongo-0.15 lib/mongo/message/message.rb