PROTON-799: Added the Delivery class to the Ruby engine APIs.
Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/b98eaa55 Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/b98eaa55 Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/b98eaa55 Branch: refs/heads/ruby-engine-apis Commit: b98eaa5591a007910d5c64a219e46bf6d1a16ce9 Parents: 79d987d Author: Darryl L. Pierce <mcpie...@gmail.com> Authored: Tue Jan 20 11:10:34 2015 -0500 Committer: Darryl L. Pierce <mcpie...@gmail.com> Committed: Tue May 19 08:02:47 2015 -0400 ---------------------------------------------------------------------- proton-c/bindings/ruby/lib/core/delivery.rb | 271 +++++++++++++++++++++++ proton-c/bindings/ruby/lib/qpid_proton.rb | 1 + 2 files changed, 272 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b98eaa55/proton-c/bindings/ruby/lib/core/delivery.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/lib/core/delivery.rb b/proton-c/bindings/ruby/lib/core/delivery.rb new file mode 100644 index 0000000..ecaf908 --- /dev/null +++ b/proton-c/bindings/ruby/lib/core/delivery.rb @@ -0,0 +1,271 @@ +#-- +# 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::Proton + + # A Delivery maintains detail on the delivery of data to an endpoint. + # + # A Delivery has a single parent Qpid::Proton::Link + # + # @example + # + # # SCENARIO: An event comes in notifying that data has been delivered to + # # the local endpoint. A Delivery object can be used to check + # # the details of the delivery. + # + # delivery = @event.delivery + # if delivery.readable? && !delivery.partial? + # # decode the incoming message + # msg = Qpid::Proton::Message.new + # msg.decode(link.receive(delivery.pending)) + # end + # + class Delivery + + # @private + include Util::Wrapper + + # @private + def self.wrap(impl) # :nodoc: + return nil if impl.nil? + self.fetch_instance(impl, :pn_delivery_attachments) || Delivery.new(impl) + end + + # @private + def initialize(impl) + @impl = impl + @local = Disposition.new(Cproton.pn_delivery_local(impl), true) + @remote = Disposition.new(Cproton.pn_delivery_remote(impl), false) + self.class.store_instance(self, :pn_delivery_attachments) + end + + # @private + include Util::SwigHelper + + # @private + PROTON_METHOD_PREFIX = "pn_delivery" + + # @!attribute [r] tag + # + # @return [String] The tag for the delivery. + # + proton_caller :tag + + # @!attribute [r] writable? + # + # A delivery is considered writable if it is the current delivery on an + # outgoing link, and the link has positive credit. + # + # @return [Boolean] Returns if a delivery is writable. + # + proton_caller :writable? + + # @!attribute [r] readable? + # + # A delivery is considered readable if it is the current delivery on an + # incoming link. + # + # @return [Boolean] Returns if a delivery is readable. + # + proton_caller :readable? + # @!attribute [r] updated? + # + # A delivery is considered updated whenever the peer communicates a new + # disposition for the dlievery. Once a delivery becomes updated, it will + # remain so until cleared. + # + # @return [Boolean] Returns if a delivery is updated. + # + # @see #clear + # + proton_caller :updated? + + # @!method clear + # + # Clear the updated flag for a delivery. + # + proton_caller :clear + + # @!attribute [r] pending + # + # @return [Fixnum] Return the amount of pending message data for the + # delivery. + # + proton_caller :pending + + # @!attribute [r] partial? + # + # @return [Boolean] Returns if the delivery has only partial message data. + # + proton_caller :partial? + + # @!attribute [r] settled? + # + # @return [Boolean] Returns if the delivery is remotely settled. + # + proton_caller :settled? + + + # @!method settle + # + # Settles a delivery. + # + # A settled delivery can never be used again. + # + proton_caller :settle + + # @!method dump + # + # Utility function for printing details of a delivery. + # + proton_caller :dump + + # @!attribute [r] buffered? + # + # A delivery that is buffered has not yet been written to the wire. + # + # Note that returning false does not imply that a delivery was definitely + # written to the wire. If false is returned, it is not known whether the + # delivery was actually written to the wire or not. + # + # @return [Boolean] Returns if the delivery is buffered. + # + proton_caller :buffered? + + include Util::Engine + + def update(state) + impl = self.local.impl + object_to_data(self.local.data, Cproton.pn_disposition_data(impl)) + object_to_data(self.local.annotations, Cproton.pn_disposition_annotations(impl)) + object_to_data(self.local.condition, Cproton.pn_disposition_condition(impl)) + Cproton.pn_delivery_update(@impl, state) + end + + # Returns the local disposition state for the delivery. + # + # @return [Disposition] The local disposition state. + # + def local_state + Cproton.pn_delivery_local_state(@impl) + end + + # Returns the remote disposition state for the delivery. + # + # @return [Disposition] The remote disposition state. + # + def remote_state + Cproton.pn_delivery_remote_state(@impl) + end + + # Returns the next delivery on the connection that has pending operations. + # + # @return [Delivery, nil] The next delivery, or nil if there are none. + # + # @see Connection#work_head + # + def work_next + Delivery.wrap(Cproton.pn_work_next(@impl)) + end + + # Returns the parent link. + # + # @return [Link] The parent link. + # + def link + Link.wrap(Cproton.pn_delivery_link(@impl)) + end + + # Returns the parent session. + # + # @return [Session] The session. + # + def session + self.link.session + end + + # Returns the parent connection. + # + # @return [Connection] The connection. + # + def connection + self.session.connection + end + + # Returns the parent transport. + # + # @return [Transport] The transport. + # + def transport + self.connection.transport + end + + # @private + def local_received? + self.local_state == Disposition::RECEIVED + end + + # @private + def remote_received? + self.remote_state == Disposition::RECEIVED + end + + # @private + def local_accepted? + self.local_state == Disposition::ACCEPTED + end + + # @private + def remote_accepted? + self.remote_state == Disposition::ACCEPTED + end + + # @private + def local_rejected? + self.local_state == Disposition::REJECTED + end + + # @private + def remote_rejected? + self.remote_state == Disposition::REJECTED + end + + # @private + def local_released? + self.local_state == Disposition::RELEASED + end + + # @private + def remote_released? + self.remote_state == Disposition::RELEASED + end + + # @private + def local_modified? + self.local_state == Disposition::MODIFIED + end + + # @private + def remote_modified? + self.remote_state == Disposition::MODIFIED + end + + end + +end http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/b98eaa55/proton-c/bindings/ruby/lib/qpid_proton.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/lib/qpid_proton.rb b/proton-c/bindings/ruby/lib/qpid_proton.rb index 84c39fc..d7b5803 100644 --- a/proton-c/bindings/ruby/lib/qpid_proton.rb +++ b/proton-c/bindings/ruby/lib/qpid_proton.rb @@ -58,6 +58,7 @@ require "core/endpoint" require "core/session" require "core/terminus" require "core/disposition" +require "core/delivery" # Messenger API classes require "messenger/filters" --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org