/usr/local/CPAN/Scripting/Scripting/Event.pm
# File: $Source: /Users/clajac/cvsroot//Scripting/Scripting/Event.pm,v $
# Author: $Author: clajac $
# Date: $Date: 2003/07/21 10:10:05 $
# Revision: $Revision: 1.5 $
package Scripting::Event;
use strict;
use constant GLOBAL_NAMESPACE => "_Global";
require Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw();
our @EXPORT_OK = qw(GLOBAL_NAMESPACE);
our %EXPORT_TAGS = (
constants => [qw(GLOBAL_NAMESPACE)],
);
my %Events;
sub new {
my $pkg = shift;
$pkg = ref $pkg || $pkg;
my %args = (
namespace => GLOBAL_NAMESPACE,
@_,
);
my $self = bless {
}, $pkg;
return $self;
}
sub has_event {
my ($pkg, $ns, $event) = @_;
return exists $Events{"$ns/$event"};
}
sub remove_event {
my ($pkg, $ns, $event) = @_;
delete $Events{"$ns/$event"};
}
sub add_event {
my ($pkg, $ns, $event, $cb) = @_;
$Events{"$ns/$event"} = $cb;
}
sub invoke {
my $self = shift;
my ($ns, $event);
if(@_ == 1) {
$ns = GLOBAL_NAMESPACE;
$event = shift;
} elsif(@_ == 2) {
($ns, $event) = @_;
} else {
die "Bad number of arguments\n";
}
return unless $self->has_event($ns, $event);
$Events{"$ns/$event"}->()
}
1;