⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 base.pm

📁 视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.
💻 PM
字号:
package DBI::Gofer::Transport::Base;#   $Id: Base.pm 10087 2007-10-16 12:42:37Z timbo $##   Copyright (c) 2007, Tim Bunce, Ireland##   You may distribute under the terms of either the GNU General Public#   License or the Artistic License, as specified in the Perl README file.use strict;use warnings;use DBI;use base qw(DBI::Util::_accessor);use DBI::Gofer::Serializer::Storable;use DBI::Gofer::Serializer::DataDumper;our $VERSION = sprintf("0.%06d", q$Revision: 10087 $ =~ /(\d+)/o);__PACKAGE__->mk_accessors(qw(    trace    keep_meta_frozen    serializer_obj));# see also $ENV{DBI_GOFER_TRACE} in DBI::Gofer::Executesub _init_trace { (split(/=/,$ENV{DBI_GOFER_TRACE}||0))[0] }sub new {    my ($class, $args) = @_;    $args->{trace} ||= $class->_init_trace;    $args->{serializer_obj} ||= DBI::Gofer::Serializer::Storable->new();    my $self = bless {}, $class;    $self->$_( $args->{$_} ) for keys %$args;    $self->trace_msg("$class->new({ @{[ %$args ]} })\n") if $self->trace;    return $self;}my $packet_header_text  = "GoFER1:";my $packet_header_regex = qr/^GoFER(\d+):/;sub _freeze_data {    my ($self, $data, $serializer, $skip_trace) = @_;    my $frozen = eval {        $self->_dump("freezing $self->{trace} ".ref($data), $data)            if !$skip_trace and $self->trace;        local $data->{meta}; # don't include _meta in serialization	$serializer ||= $self->{serializer_obj};        my ($data, $deserializer_class)  = $serializer->serialize($data);        $packet_header_text . $data;    };    if ($@) {        chomp $@;        die "Error freezing ".ref($data)." object: $@";    }    # stash the frozen data into the data structure itself    # to make life easy for the client caching code in DBD::Gofer::Transport::Base    $data->{meta}{frozen} = $frozen if $self->keep_meta_frozen;    return $frozen;}# public aliases used by subclasses*freeze_request  = \&_freeze_data;*freeze_response = \&_freeze_data;sub _thaw_data {    my ($self, $frozen_data, $serializer, $skip_trace) = @_;    my $data;    eval {        # check for and extract our gofer header and the info it contains        (my $frozen = $frozen_data) =~ s/$packet_header_regex//o            or die "does not have gofer header\n";        my ($t_version) = $1;	$serializer ||= $self->{serializer_obj};        $data = $serializer->deserialize($frozen);        die ref($serializer)."->deserialize didn't return a reference"            unless ref $data;        $data->{_transport}{version} = $t_version;        $data->{meta}{frozen} = $frozen_data if $self->keep_meta_frozen;    };    if ($@) {        chomp(my $err = $@);        # remove extra noise from Storable        $err =~ s{ at \S+?/Storable.pm \(autosplit into \S+?/Storable/thaw.al\) line \d+(, \S+ line \d+)?}{};        my $msg = sprintf "Error thawing: %s (data=%s)", $err, DBI::neat($frozen_data,50);        Carp::cluck("$msg, pid $$ stack trace follows:"); # XXX if $self->trace;        die $msg;    }    $self->_dump("thawing $self->{trace} ".ref($data), $data)        if !$skip_trace and $self->trace;    return $data;}# public aliases used by subclasses*thaw_request  = \&_thaw_data;*thaw_response = \&_thaw_data;# this should probably live in the request and response classes# and the tace level passed insub _dump {    my ($self, $label, $data) = @_;    # don't dump the binary    local $data->{meta}{frozen} if $data->{meta} && $data->{meta}{frozen};    if ($self->trace >= 2) {        require Data::Dumper;        local $Data::Dumper::Indent    = 1;        local $Data::Dumper::Terse     = 1;        local $Data::Dumper::Useqq     = 0;        local $Data::Dumper::Sortkeys  = 1;        local $Data::Dumper::Quotekeys = 0;        local $Data::Dumper::Deparse   = 0;        local $Data::Dumper::Purity    = 0;        $self->trace_msg("$label: ".Data::Dumper::Dumper($data));    }    else {        my $summary = eval { $data->summary_as_text } || $@ || "no summary available\n";        $self->trace_msg("$label: $summary");    }}sub trace_msg {    my ($self, $msg, $min_level) = @_;    $min_level = 1 unless defined $min_level;    # modeled on DBI's trace_msg method    return 0 if $self->trace < $min_level;    return DBI->trace_msg($msg, 0); # 0 to force logging even if DBI trace not enabled}1;=head1 NAMEDBI::Gofer::Transport::Base - Base class for Gofer transports=head1 DESCRIPTIONThis is the base class for server-side Gofer transports.It's also the base class for the client-side base class L<DBD::Gofer::Transport::Base>.This is an internal class.=head1 AUTHORTim Bunce, L<http://www.tim.bunce.name>=head1 LICENCE AND COPYRIGHTCopyright (c) 2007, Tim Bunce, Ireland. All rights reserved.This module is free software; you can redistribute it and/ormodify it under the same terms as Perl itself. See L<perlartistic>.=cut

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -