Firewall-Config-Element
view release on metacpan or search on metacpan
lib/Firewall/Config/Element/Service/Role.pm view on Meta::CPAN
package Firewall::Config::Element::Service::Role;
#------------------------------------------------------------------------------
# å è½½æ©å±æ¨¡å
#------------------------------------------------------------------------------
use Carp;
use Moose::Role;
use Mojo::Loader qw(load_class);
use Firewall::Config::Element::ServiceMeta::Role;
#------------------------------------------------------------------------------
# å¼å
¥ Firewall::Config::Element::Role è§è²
#------------------------------------------------------------------------------
with 'Firewall::Config::Element::Role';
#------------------------------------------------------------------------------
# Firewall::Config::Element::Service::Role éç¨å±æ§
#------------------------------------------------------------------------------
has srvName => ( is => 'ro', isa => 'Str', required => 1, );
has metas => ( is => 'ro', does => 'HashRef[Firewall::Config::Element::ServiceMeta::Role]', default => sub { {} }, );
has dstPortRangeMap => ( is => 'ro', isa => 'HashRef[Firewall::Utils::Set]', default => sub { {} }, );
has refnum => ( is => 'ro', isa => 'Int', default => 0 );
has range => ( is => 'ro', isa => 'Firewall::Utils::Set', lazy => 1, builder => '_buildRange', );
#------------------------------------------------------------------------------
# getServiceClassName è·åæå¡ç«¯å£å
#------------------------------------------------------------------------------
sub getServiceClassName {
my $self = shift;
return ref($self);
}
#------------------------------------------------------------------------------
# getServiceClassName è·ååå§ç«¯å£ï¼é¢å®ä¹ï¼å
#------------------------------------------------------------------------------
sub getServiceMetaClassName {
my ( $self, $serviceClassName ) = @_;
my $serviceMetaClassName = $serviceClassName // $self->getServiceClassName;
$serviceMetaClassName =~ s/::Service::/::ServiceMeta::/o;
return $serviceMetaClassName;
}
#------------------------------------------------------------------------------
# Moose BUILDARGS å¨å®ä¾å建ä¹åçæï¼å¯ä»¥æ¥æ¶åå¸ååå¸çå¼ç¨
# https://metacpan.org/pod/Moose::Manual::Construction
# https://metacpan.org/pod/Moose::Object
#------------------------------------------------------------------------------
around BUILDARGS => sub {
my $orig = shift;
my $serviceClassName = shift;
if ( @_ > 2 ) {
my $serviceMetaClassName = $serviceClassName->getServiceMetaClassName($serviceClassName);
#--------------------------------------------------------------------------
# å°è¯å è½½ serviceMetaClassName
# https://metacpan.org/pod/Mojo::Loader#load_class
#--------------------------------------------------------------------------
if ( my $e = load_class $serviceMetaClassName) {
die ref $e ? "Exception: $e" : "$serviceMetaClassName Not found!";
}
# å®ä¾å serviceMetaClassName
my $metaObj = $serviceMetaClassName->new(@_);
return $serviceClassName->$orig( @_, 'metas', {$metaObj->sign => $metaObj} );
}
else {
return $serviceClassName->$orig(@_);
}
};
#------------------------------------------------------------------------------
# Moose BUILD ç¨äºå¯¹è±¡å建åï¼è¿è¡å±æ§æ£æ¥é»è¾
# https://metacpan.org/pod/Moose::Manual::Construction
#------------------------------------------------------------------------------
sub BUILD {
my $self = shift;
my @metas = values %{$self->metas};
for my $metaObj (@metas) {
$self->mergeDstPortRangeMap($metaObj);
( run in 2.275 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )