Suppose you are implementing a mail module with support for
virtual domains, and you want to let other modules know when a
virtual domain is deleted. You could define an abstract class called
EBox::MailObserver
, like this:
Example 4.4. Defining an observer that may be implemented by other modules
package EBox::MailObserver; use strict; use warnings; sub new { my $class = shift; my $self = {}; bless($self, $class); return $self; } # When a virtual domain is deleted this method is called sub virtualDomainDeleted # (domainName) {}
When a relevant event takes place, your mail module
would call the virtualDomainDeleted
function on all the modules that extend the
EBox::MailObserver
class:
Example 4.5. Calling observer modules
sub removeVirtualDomain # (domainName) { my ($self, $domain) = @_; # # do stuff # my $global = EBox::Global->getInstance(); my @modules = @{$global->modInstancesOfType('EBox::MailObserver')}; foreach my $mod (@modules) { $mod->virtualDomainDeleted($domain); } }