PROTON-799: Added the Collector 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/9748c325 Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/9748c325 Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/9748c325 Branch: refs/heads/ruby-engine-apis Commit: 9748c3255a8807fe01bc2e4ff750604ca319e638 Parents: 54cf5d4 Author: Darryl L. Pierce <mcpie...@gmail.com> Authored: Tue Jan 6 13:51:34 2015 -0500 Committer: Darryl L. Pierce <mcpie...@gmail.com> Committed: Thu May 14 15:17:26 2015 -0400 ---------------------------------------------------------------------- proton-c/bindings/ruby/lib/event/collector.rb | 148 +++++++++++++++++++++ proton-c/bindings/ruby/lib/qpid_proton.rb | 3 + proton-c/bindings/ruby/ruby.i | 9 ++ 3 files changed, 160 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9748c325/proton-c/bindings/ruby/lib/event/collector.rb ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/lib/event/collector.rb b/proton-c/bindings/ruby/lib/event/collector.rb new file mode 100644 index 0000000..c86b0f2 --- /dev/null +++ b/proton-c/bindings/ruby/lib/event/collector.rb @@ -0,0 +1,148 @@ +#-- +# 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::Event + + # A Collector is used to register interest in events produced by one + # or more Connection objects. + # + # == Events + # + # @see Qpid::Proton::Event The list of predefined events. + # + # @example + # + # conn = Qpid::Proton::Connection.new + # coll = Qpid::Proton::Event::Collector.new + # conn.collect(coll) + # + # # transport setup not included here for brevity + # + # loop do + # + # # wait for an event and then perform the following + # + # event = collector.peek + # + # unless event.nil? + # case event.type + # + # when Qpid::Proton::Event::CONNECTION_REMOTE_CLOSE + # conn = event.context # the context here is the connection + # # the remote connection closed, so only close our side if it's + # # still open + # if !(conn.state & Qpid::Proton::Endpoint::LOCAL_CLOSED) + # conn.close + # end + # + # when Qpid::proton::Event::SESSION_REMOTE_OPEN + # session = event.session # the context here is the session + # # the remote session is now open, so if the local session is + # # uninitialized, then open it + # if session.state & Qpid::Proton::Endpoint::LOCAL_UNINIT + # session.incoming_capacity = 1000000 + # session.open + # end + # + # end + # + # # remove the processed event and get the next event + # # the loop will exit when we have no more events to process + # collector.pop + # event = collector.peek + # + # end + # + class Collector + + # @private + attr_reader :impl + + # Creates a new Collector. + # + def initialize + @impl = Cproton.pn_collector + ObjectSpace.define_finalizer(self, self.class.finalize!(@impl)) + end + + # @private + def self.finalize!(impl) + proc { + Cproton.pn_collector_free(impl) + } + end + + # Releases the collector. + # + # Once in a released state, a collector will drain any internally queued + # events, shrink its memory footprint to a minimu, and discard any newly + # created events. + # + def release + Cproton.pn_collector_release(@impl) + end + + # Place a new event on the collector. + # + # This operation will create a new event of the given type and context + # and return a new Event instance. In some cases an event of a given + # type can be elided. When this happens, this operation will return + # nil. + # + # @param context [Object] The event context. + # @param event_type [EventType] The event type. + # + # @return [Event] the event if it was queued + # @return [nil] if it was elided + # + def put(context, event_type) + Cproton.pn_collector_put(@impl, Cproton.pn_rb2void(context), event_type.type_code) + end + + # Access the head event. + # + # This operation will continue to return the same event until it is + # cleared by using #pop. The pointer return by this operation will be + # valid until ::pn_collector_pop is invoked or #free is called, whichever + # happens sooner. + # + # @return [Event] the head event + # @return [nil] if there are no events + # + # @see #pop + # @see #put + # + def peek + Event.wrap(Cproton.pn_collector_peek(@impl)) + end + + # Clear the head event. + # + # @return [Boolean] true if an event was removed + # + # @see #release + # @see #peek + # + def pop + Cproton.pn_collector_pop(@impl) + end + + end + +end http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9748c325/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 28a83aa..f1b17ea 100644 --- a/proton-c/bindings/ruby/lib/qpid_proton.rb +++ b/proton-c/bindings/ruby/lib/qpid_proton.rb @@ -43,6 +43,9 @@ require "types/described" require "codec/mapping" require "codec/data" +# Event API classes +require "event/collector" + # Main Proton classes require "core/message" http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/9748c325/proton-c/bindings/ruby/ruby.i ---------------------------------------------------------------------- diff --git a/proton-c/bindings/ruby/ruby.i b/proton-c/bindings/ruby/ruby.i index 7641966..28e0a1b 100644 --- a/proton-c/bindings/ruby/ruby.i +++ b/proton-c/bindings/ruby/ruby.i @@ -528,4 +528,13 @@ VALUE pni_address_of(void *object) { %} +//%rename(pn_collector_put) wrap_pn_collector_put; +//%inline %{ +// pn_event_t *wrap_pn_collector_put(pn_collector_t *collector, void *context, +// pn_event_type_t type) { +// return pn_collector_put(collector, PN_RBREF, context, type); +// } +// %} +//%ignore pn_collector_put; + %include "proton/cproton.i" --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@qpid.apache.org For additional commands, e-mail: commits-h...@qpid.apache.org