blob: 6ae6959f8688bb276e70649a6fb351b3d6d17bce [file] [log] [blame]
#--
# 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
# @private
def self.dispatch(handler, method, *args)
args = args.last unless args.nil?
if handler.respond_to? method.to_sym
return handler.__send__(method, args)
elsif handler.respond_to? :on_unhandled
return handler.__send__(:on_unhandled, method, args)
end
end
# EventBase is the foundation for creating application-specific events.
#
# @example
#
# # SCENARIO: A continuation of the example in EventType.
# #
# # An Event class is defined to handle receiving encrypted
# # data from a remote endpoint.
#
# class EncryptedDataEvent < EventBase
# def initialize(message)
# super(EncryptedDataEvent, message,
# Qpid::Proton::Event::ENCRYPTED_RECV)
# end
# end
#
# # at another point, when encrypted data is received
# msg = Qpid::Proton::Message.new
# msg.decode(link.receive(link.pending))
# if encrypted?(msg)
# collector.put(EncryptedDataEvent.new(msg)
# end
#
# @see EventType The EventType class for how ENCRYPTED_RECV was defined.
#
class EventBase
# Returns the name for the class associated with this event.
attr_reader :class_name
# Returns the associated context object for the event.
attr_reader :context
# Returns the type of the event.
attr_reader :type
# Creates a new event with the specific class_name and context of the
# specified type.
#
# @param class_name [String] The name of the class.
# @param context [Object] The event context.
# @param type [EventType] The event type.
#
def initialize(class_name, context, type)
@class_name = class_name
@context = context
@type = type
end
# Invokes the type-specific method on the provided handler.
#
# @param handler [Object] The handler to be notified of this event.
#
def dispatch(handler)
Qpid::Proton.dispatch(handler, @type.method, self)
end
end
end