X-Git-Url: https://git.sesse.net/?p=remoteglot;a=blobdiff_plain;f=remoteglot.pl;h=bb16ebcbd9931d23cc360dfac948b9faeed59c17;hp=42db14667b50313ffe9f36efe10b76ee3513145c;hb=a5d359eaff725889fd3554a7c3b7ac5088eb7c63;hpb=b24a86cec9d0c835eae094b5f82c2197176e9c17 diff --git a/remoteglot.pl b/remoteglot.pl index 42db146..bb16ebc 100755 --- a/remoteglot.pl +++ b/remoteglot.pl @@ -24,6 +24,7 @@ my $engine2_cmdline = "./stockfish_13111119_x64_modern_sse42"; 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 $update_max_interval = 2.0; my $second_engine_start_depth = 8; my @masters = ( 'Sesse', @@ -35,6 +36,7 @@ my @masters = ( # Program starts here $SIG{ALRM} = sub { output_screen(); }; +my $latest_update = undef; $| = 1; @@ -186,22 +188,22 @@ while (1) { if ($nfound > 0 && vec($rout, fileno($engine->{'read'}), 1) == 1) { my @lines = read_lines($engine); for my $line (@lines) { + next if $line =~ /(upper|lower)bound/; handle_uci($engine, $line, 1); } $sleep = 0; - # don't update too often - Time::HiRes::alarm(0.2); + output_screen(); } if ($nfound > 0 && vec($rout, fileno($engine2->{'read'}), 1) == 1) { my @lines = read_lines($engine2); for my $line (@lines) { + next if $line =~ /(upper|lower)bound/; handle_uci($engine2, $line, 0); } $sleep = 0; - # don't update too often - Time::HiRes::alarm(0.2); + output_screen(); } sleep $sleep; @@ -239,7 +241,7 @@ sub handle_uci { } else { if (defined($move_calculating_second_engine)) { my $move = $refutation_moves{$move_calculating_second_engine}; - $move->{'pv'} = $engine->{'info'}{'pv'}; + $move->{'pv'} = $engine->{'info'}{'pv'} // $engine->{'info'}{'pv1'}; $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'}; @@ -619,9 +621,17 @@ sub prettyprint_pv { sub output_screen { #return; - + return if (!defined($pos_calculating)); + # 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]; + my $info = $engine->{'info'}; my $id = $engine->{'id'}; @@ -674,7 +684,7 @@ sub output_screen { # if (exists($info->{'pv1'}) && !exists($info->{'pv2'})) { for my $key (qw(pv score_cp score_mate nodes nps depth seldepth tbhits)) { - if (exists($info->{$key . '1'}) && !exists($info->{$key})) { + if (exists($info->{$key . '1'})) { $info->{$key} = $info->{$key . '1'}; } } @@ -1048,6 +1058,9 @@ sub short_score { } else { if (exists($info->{'score_cp' . $mpv})) { my $score = $info->{'score_cp' . $mpv} * 0.01; + if ($score == 0) { + return " 0.00"; + } if ($invert) { $score = -$score; }