my ($pos_calculating, $pos_calculating_second_engine);
uciprint($engine, "setoption name UCI_AnalyseMode value true");
+uciprint($engine, "setoption name Analysis Contempt value Off");
while (my ($key, $value) = each %remoteglotconf::engine_config) {
uciprint($engine, "setoption name $key value $value");
}
if (defined($engine2)) {
uciprint($engine2, "setoption name UCI_AnalyseMode value true");
+ uciprint($engine2, "setoption name Analysis Contempt value Off");
while (my ($key, $value) = each %remoteglotconf::engine2_config) {
uciprint($engine2, "setoption name $key value $value");
}
);
}
if (defined($remoteglotconf::target)) {
- if ($remoteglotconf::target =~ /^https?:/) {
+ if ($remoteglotconf::target =~ /^(?:\/|https?:)/) {
fetch_pgn($remoteglotconf::target);
} elsif (defined($t)) {
$t->cmd("observe $remoteglotconf::target");
# Starts periodic fetching of PGNs from the given URL.
sub fetch_pgn {
my ($url) = @_;
- AnyEvent::HTTP::http_get($url, sub {
- handle_pgn(@_, $url);
- });
+ if ($url =~ m#^/#) { # Local file.
+ eval {
+ local $/ = undef;
+ open my $fh, "<", $url
+ or die "$url: $!";
+ my $pgn = <$fh>;
+ close $fh;
+ handle_pgn($pgn, '', $url);
+ };
+ if ($@) {
+ warn "$url: $@";
+ $http_timer = AnyEvent->timer(after => 1.0, cb => sub {
+ fetch_pgn($url);
+ });
+ }
+ } else {
+ AnyEvent::HTTP::http_get($url, sub {
+ handle_pgn(@_, $url);
+ });
+ }
}
my ($last_pgn_white, $last_pgn_black);
my $pos;
if (exists($tags->{'FEN'})) {
$pos = Position->from_fen($tags->{'FEN'});
+ $pos->{'last_move'} = 'none';
$pos->{'player_w'} = $white;
$pos->{'player_b'} = $black;
$pos->{'start_fen'} = $tags->{'FEN'};
if (exists($tags->{'Variant'}) &&
$tags->{'Variant'} =~ /960|fischer/i) {
$pos->{'chess960'} = 1;
+ } else {
+ $pos->{'chess960'} = 0;
}
my $moves = $pgn->moves;
my @uci_moves = ();
# It's wrong to just give the FEN (the move history is useful,
# and per the UCI spec, we should really have sent "ucinewgame"),
# but it's easier, and it works around a Stockfish repetition issue.
- if ($engine->{'chess960'} != $pos->is_chess960()) {
- uciprint($engine, "setoption UCI_Chess960 " . ($pos->is_chess960() ? 'true' : 'false'));
- $engine->{'chess960'} = $pos->is_chess960();
+ if ($engine->{'chess960'} != $pos->{'chess960'}) {
+ uciprint($engine, "setoption name UCI_Chess960 value " . ($pos->{'chess960'} ? 'true' : 'false'));
+ $engine->{'chess960'} = $pos->{'chess960'};
}
uciprint($engine, "position fen " . $pos->fen());
uciprint($engine, "go infinite");
$engine2->{'stopping'} = 1;
uciprint($engine2, "stop");
}
- if ($engine2->{'chess960'} != $pos->is_chess960()) {
- uciprint($engine2, "setoption UCI_Chess960 " . ($pos->is_chess960() ? 'true' : 'false'));
- $engine2->{'chess960'} = $pos->is_chess960();
+ if ($engine2->{'chess960'} != $pos->{'chess960'}) {
+ uciprint($engine2, "setoption name UCI_Chess960 value " . ($pos->{'chess960'} ? 'true' : 'false'));
+ $engine2->{'chess960'} = $pos->{'chess960'};
}
uciprint($engine2, "position fen " . $pos->fen());
uciprint($engine2, "go infinite");
} else {
$pos = Position->start_pos('white', 'black');
}
+ $pos->{'chess960'} = $pos_calculating->{'chess960'};
my $halfmove_num = 0;
for my $move (@{$pos_calculating->{'history'}}) {
my $id = id_for_pos($pos, $halfmove_num);