Changeset 860

Show
Ignore:
Timestamp:
03/05/09 01:35:28 (9 months ago)
Author:
mart
Message:

Add a facility for BasePlugin-derived plugins to make configurable function names declaratively.

Location:
trunk/DJabberd-Gearman/lib/DJabberd/Gearman
Files:
2 modified

Legend:

Unmodified
Added
Removed
  • trunk/DJabberd-Gearman/lib/DJabberd/Gearman/BasePlugin.pm

    r859 r860  
    100100} 
    101101 
     102sub make_configurable_funcs { 
     103    my ($class, @funcs) = @_; 
     104 
     105    no strict 'refs'; 
     106 
     107    foreach my $func (@funcs) { 
     108        my $config_name = $func.'_func'; 
     109        my $set_config_name = "set_config_".$func."func"; 
     110        *{$class."::".$set_config_name} = sub { 
     111            my ($self, $name) = @_; 
     112            $self->$config_name($name); 
     113        }; 
     114 
     115        *{$class."::".$config_name} = sub { 
     116            my $self = shift; 
     117 
     118            if (@_) { 
     119                $self->{$config_name} = shift; 
     120                $self->{$config_name} =~ s/^\s*//g; 
     121                $self->{$config_name} =~ s/\s*$//g; 
     122            } 
     123            else { 
     124                return $self->{$config_name}; 
     125            } 
     126        }; 
     127    } 
     128} 
     129 
    1021301; 
    103131 
  • trunk/DJabberd-Gearman/lib/DJabberd/Gearman/Delivery.pm

    r859 r860  
    2727 
    2828use DJabberd::Gearman; 
    29 use base qw(DJabberd::Delivery DJabberd::Gearman::BasePlugin); 
     29use base qw(DJabberd::Gearman::BasePlugin); 
     30use DJabberd::Log; 
     31my $logger = DJabberd::Log->get_logger(); 
    3032 
    31 sub set_config_receivefunc { 
    32     my ($self, $receive_func) = @_; 
    33  
    34     $self->{receive_func} = $receive_func; 
    35     $self->{receive_func} =~ s/^\s*//g; 
    36     $self->{receive_func} =~ s/\s*$//g; 
    37 } 
    38  
    39 sub set_config_transmitfunc { 
    40     my ($self, $transmit_func) = @_; 
    41  
    42     $self->{transmit_func} = $transmit_func; 
    43 } 
     33__PACKAGE__->make_configurable_funcs(qw(receive transmit)); 
    4434 
    4535sub register { 
     
    5040    my $client = $self->gearman_client; 
    5141 
    52     if ($self->{receive_func}) { 
     42    if ($self->receive_func) { 
    5343        $vhost->register_hook('deliver', sub { 
    5444            $self->handle_received_stanza(@_); 
    5545        }); 
    5646    } 
    57  
    58     return $self->SUPER::register($vhost); 
    5947} 
    6048 
     
    6250    my ($self, $vhost, $cb, $stanza) = @_; 
    6351 
    64     my $func = $self->{receive_func}; 
     52    my $func = $self->receive_func; 
    6553    my $stanza_xml = $stanza->as_xml; 
     54 
     55    $logger->debug("Sending stanza to $func function"); 
    6656 
    6757    $self->call_gearman_func($func, $stanza_xml, {