📄 程嶏清单 17-13.txt
字号:
程序清单17-13:call_rpc.pl
package RPC;
use Msg;
use strict;
use Carp;
@RPC::ISA = qw(Msg);
use FreezeThaw qw(freeze thaw);
sub connect {
my ($pkg, $host, $port) = @_;
my $conn = $pkg->SUPER::connect($host,$port, \&_incoming_msg);
return $conn;
}
my $g_msg_id = 0;
my $send_err = 0;
sub handle_send_err {
$send_err = $!;
}
sub rpc {
my $conn = shift;
my $subname = shift;
$subname = (caller() . '::' . $subname) unless $subname =~ /:/;
my $gimme = wantarray ? 'a' : 's'; # 数组或标量变量
my $msg_id = ++$g_msg_id;
my $serialized_msg = freeze ('>', $msg_id, $gimme, @_);
# 发送与接收
$conn->send_later ($serialized_msg);
do {
Msg->event_loop(1); # Dispatch other messages until we
# get a response
} until (exists $conn->{rcvd}->{$msg_id} || $send_err);
if ($send_err) {
die "RPC Error: $send_err";
}
# 消息出队
my $rl_retargs = delete $conn->{rcvd}->{$msg_id}; # 指向数组的引用
if (ref($rl_retargs->[0]) eq 'RPC::Error') {
die ${$rl_retargs->[0]};
}
wantarray ? @$rl_retargs : $rl_retargs->[0];
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -