summaryrefslogtreecommitdiff
path: root/cpp/bindings/qpid/ruby/lib/qpid_messaging/sender.rb
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/bindings/qpid/ruby/lib/qpid_messaging/sender.rb')
-rw-r--r--cpp/bindings/qpid/ruby/lib/qpid_messaging/sender.rb135
1 files changed, 135 insertions, 0 deletions
diff --git a/cpp/bindings/qpid/ruby/lib/qpid_messaging/sender.rb b/cpp/bindings/qpid/ruby/lib/qpid_messaging/sender.rb
new file mode 100644
index 0000000000..4ce1393dc7
--- /dev/null
+++ b/cpp/bindings/qpid/ruby/lib/qpid_messaging/sender.rb
@@ -0,0 +1,135 @@
+#--
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you 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.
+#++
+
+module Qpid
+
+ module Messaging
+
+ # +Sender+ is the entity through which messages are sent.
+ #
+ # An instance of +Sender+ can only be created using an active (not previously
+ # closed) Session. See Qpid::Messaging::Session.create_sender for more details.
+ #
+ # ==== Examples
+ #
+ # # create a connection
+ # conn = Qpid::Messaging::Connection.new "mybroker:5672"
+ # conn.open
+ #
+ # if conn.open?
+ #
+ # # create a session
+ # session = conn.create_session
+ #
+ # # create a sender that posts messages to the "updates" queue
+ # sender = session.create_sender "updates;{create:always}
+ #
+ # # begin sending updates
+ # loop do
+ # # wait for the next event content then send it
+ # content = wait_for_event
+ # sender.send Qpid::Messaging::Message.new :content => content
+ # end
+ # end
+ #
+ class Sender
+
+ def initialize(session, sender_impl) # :nodoc:
+ @session = session
+ @sender_impl = sender_impl
+ end
+
+ def sender_impl # :nodoc:
+ @sender_impl
+ end
+
+ # Sends a message, optionally blocking until the message is received
+ # by the broker.
+ #
+ # ==== Options
+ #
+ # * +message+ - The message to send.
+ # * +:sync+ - Block until received. See note below on synching.
+ #
+ # ==== Synching
+ #
+ # If :sync => true, then the call will block until the broker confirms
+ # receipt of the message. Otherwise it will only block for available
+ # capacity; i.e., until pending is equal to capacity.
+ #
+ # ==== Examples
+ #
+ # # send a message
+ # outgoing = Qpid::Messaging::Message.new :content => content
+ # sender.send outgoing
+ #
+ # # send a message, wait for confirmation from the broker
+ # outgoing = Qpid::Messaging::Message.new :content => content
+ # sender.send outgoing, :sync => true
+ #
+ def send(message, args = {}, &block)
+ sync = args[:sync] || false
+ @sender_impl.send message.message_impl, sync
+ block.call message unless block.nil?
+ end
+
+ # Closes this +Sender+.
+ #
+ # This does not affect the owning Session or Connection.
+ def close; @sender_impl.close; end
+
+ # Returns the human-readable name for this +Sender+.
+ def name; @sender_impl.getName; end
+
+ # Sets the capacity for this +Sender+.
+ #
+ # The capacity is the number of outgoing messages that can be held
+ # pending confirmation of receipt by the broker.
+ #
+ # ==== Options
+ #
+ # * +capacity+ - the capacity
+ def capacity=(capacity); @sender_impl.setCapacity capacity; end
+
+ # Returns the capacity.
+ def capacity; @sender_impl.getCapacity; end
+
+ # Returns the number of messages sent that are pending receipt
+ # confirmation by the broker.
+ def unsettled; @sender_impl.getUnsettled; end
+
+ # Returns the available slots for sending messages.
+ #
+ # This differs from +capacity+ in that it is the available slots in
+ # the senders capacity for holding outgoing messages. The difference
+ # between capacity and available is the number of messages that
+ # have not been delivered yet.
+ def available
+ @sender_impl.getAvailable
+ end
+
+ # Returns the Session for this sender.
+ def session; @session; end
+
+ end
+
+ end
+
+end
+