my $telltarget = undef; # undef to be silent
my @tell_intervals = (5, 20, 60, 120, 240, 480, 960); # after each move
my $uci_assume_full_compliance = 0; # dangerous :-)
my $telltarget = undef; # undef to be silent
my @tell_intervals = (5, 20, 60, 120, 240, 480, 960); # after each move
my $uci_assume_full_compliance = 0; # dangerous :-)
if ($nfound > 0 && vec($rout, fileno($engine->{'read'}), 1) == 1) {
my @lines = read_lines($engine);
for my $line (@lines) {
if ($nfound > 0 && vec($rout, fileno($engine->{'read'}), 1) == 1) {
my @lines = read_lines($engine);
for my $line (@lines) {
}
if ($nfound > 0 && vec($rout, fileno($engine2->{'read'}), 1) == 1) {
my @lines = read_lines($engine2);
for my $line (@lines) {
}
if ($nfound > 0 && vec($rout, fileno($engine2->{'read'}), 1) == 1) {
my @lines = read_lines($engine2);
for my $line (@lines) {
} else {
if (defined($move_calculating_second_engine)) {
my $move = $refutation_moves{$move_calculating_second_engine};
} else {
if (defined($move_calculating_second_engine)) {
my $move = $refutation_moves{$move_calculating_second_engine};
$move->{'score_cp'} = $engine->{'info'}{'score_cp'} // $engine->{'info'}{'score_cp1'} // 0;
$move->{'score_mate'} = $engine->{'info'}{'score_mate'} // $engine->{'info'}{'score_mate1'};
$move->{'toplay'} = $pos_calculating->{'toplay'};
$move->{'score_cp'} = $engine->{'info'}{'score_cp'} // $engine->{'info'}{'score_cp1'} // 0;
$move->{'score_mate'} = $engine->{'info'}{'score_mate'} // $engine->{'info'}{'score_mate1'};
$move->{'toplay'} = $pos_calculating->{'toplay'};
+ # Don't update too often.
+ my $age = Time::HiRes::tv_interval($latest_update);
+ if ($age < $update_max_interval) {
+ Time::HiRes::alarm($update_max_interval + 0.01 - $age);
+ return;
+ }
+ $latest_update = [Time::HiRes::gettimeofday];
+