line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
1
|
|
|
|
|
|
|
package RPC::Object;
|
2
|
1
|
|
|
1
|
|
16281
|
use strict;
|
|
1
|
|
|
|
|
2
|
|
|
1
|
|
|
|
|
27
|
|
3
|
1
|
|
|
1
|
|
3
|
use warnings;
|
|
1
|
|
|
|
|
1
|
|
|
1
|
|
|
|
|
27
|
|
4
|
1
|
|
|
1
|
|
4
|
use Carp;
|
|
1
|
|
|
|
|
6
|
|
|
1
|
|
|
|
|
66
|
|
5
|
1
|
|
|
1
|
|
512
|
use IO::Socket::INET;
|
|
1
|
|
|
|
|
20251
|
|
|
1
|
|
|
|
|
5
|
|
6
|
1
|
|
|
1
|
|
1095
|
use Storable qw(thaw nfreeze);
|
|
1
|
|
|
|
|
2922
|
|
|
1
|
|
|
|
|
63
|
|
7
|
1
|
|
|
1
|
|
430
|
use RPC::Object::Common;
|
|
1
|
|
|
|
|
8
|
|
|
1
|
|
|
|
|
529
|
|
8
|
|
|
|
|
|
|
|
9
|
|
|
|
|
|
|
our $VERSION = '0.00_01';
|
10
|
|
|
|
|
|
|
$VERSION = eval $VERSION;
|
11
|
|
|
|
|
|
|
|
12
|
|
|
|
|
|
|
sub new {
|
13
|
0
|
|
|
0
|
0
|
|
my $class = shift;
|
14
|
0
|
|
|
|
|
|
my $url = shift;
|
15
|
0
|
|
|
|
|
|
my ($host, $port) = $url =~ m{([^:]+):(\d+)};
|
16
|
0
|
|
|
|
|
|
my $obj = _invoke($host, $port, @_);
|
17
|
0
|
|
|
|
|
|
my $self = {
|
18
|
|
|
|
|
|
|
host => $host,
|
19
|
|
|
|
|
|
|
port => $port,
|
20
|
|
|
|
|
|
|
object => $obj,
|
21
|
|
|
|
|
|
|
};
|
22
|
0
|
|
|
|
|
|
return bless $self, $class;
|
23
|
|
|
|
|
|
|
}
|
24
|
|
|
|
|
|
|
|
25
|
|
|
|
|
|
|
sub AUTOLOAD {
|
26
|
0
|
|
|
0
|
|
|
my $self = shift;
|
27
|
0
|
|
|
|
|
|
my $name = (split '::', our $AUTOLOAD)[-1];
|
28
|
0
|
0
|
|
|
|
|
return if $name eq 'DESTROY';
|
29
|
0
|
|
|
|
|
|
return _invoke($self->{host}, $self->{port}, $name, $self->{object}, @_);
|
30
|
|
|
|
|
|
|
}
|
31
|
|
|
|
|
|
|
|
32
|
|
|
|
|
|
|
sub _invoke {
|
33
|
0
|
|
|
0
|
|
|
my $host = shift;
|
34
|
0
|
|
|
|
|
|
my $port = shift;
|
35
|
0
|
|
|
|
|
|
my $sock = IO::Socket::INET->new(PeerAddr => $host,
|
36
|
|
|
|
|
|
|
PeerPort => $port,
|
37
|
|
|
|
|
|
|
Proto => 'tcp',
|
38
|
|
|
|
|
|
|
Type => SOCK_STREAM,
|
39
|
|
|
|
|
|
|
);
|
40
|
0
|
|
|
|
|
|
binmode $sock;
|
41
|
0
|
0
|
|
|
|
|
print {$sock} nfreeze([wantarray ? WANT_LIST : WANT_SCALAR, @_]);
|
|
0
|
|
|
|
|
|
|
42
|
0
|
|
|
|
|
|
$sock->shutdown(1);
|
43
|
0
|
|
|
|
|
|
my $res = do { local $/; <$sock> };
|
|
0
|
|
|
|
|
|
|
|
0
|
|
|
|
|
|
|
44
|
0
|
|
|
|
|
|
$sock->close();
|
45
|
0
|
|
|
|
|
|
my ($stat, @ret) = @{thaw($res)};
|
|
0
|
|
|
|
|
|
|
46
|
0
|
0
|
|
|
|
|
if ($stat eq RESPONSE_ERROR) {
|
|
|
0
|
|
|
|
|
|
47
|
0
|
|
|
|
|
|
croak @ret;
|
48
|
|
|
|
|
|
|
}
|
49
|
|
|
|
|
|
|
elsif ($stat eq RESPONSE_NORMAL) {
|
50
|
0
|
0
|
|
|
|
|
return wantarray ? @ret : $ret[0];
|
51
|
|
|
|
|
|
|
}
|
52
|
|
|
|
|
|
|
else {
|
53
|
0
|
|
|
|
|
|
croak "Unknown response";
|
54
|
|
|
|
|
|
|
}
|
55
|
0
|
|
|
|
|
|
return;
|
56
|
|
|
|
|
|
|
}
|
57
|
|
|
|
|
|
|
|
58
|
|
|
|
|
|
|
1;
|
59
|
|
|
|
|
|
|
__END__
|