WIP
This commit is contained in:
parent
94bd4ec01c
commit
c5d07db007
|
@ -49,6 +49,20 @@ pub struct AnalysisParams {
|
|||
pub black_time: i32,
|
||||
pub white_inc: i32,
|
||||
pub black_inc: i32,
|
||||
pub focus: Option<Move>,
|
||||
}
|
||||
|
||||
impl AnalysisParams {
|
||||
pub fn new() -> AnalysisParams {
|
||||
AnalysisParams {
|
||||
move_time: -1,
|
||||
white_time: -1,
|
||||
black_time: -1,
|
||||
white_inc: -1,
|
||||
black_inc: -1,
|
||||
focus: None,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// Analysis info to report.
|
||||
|
@ -105,6 +119,9 @@ impl Analyzer {
|
|||
self.log(format!("Analyzing node:\n{}", &self.node));
|
||||
let moves = self.node.get_player_moves();
|
||||
self.log(format!("Legal moves: {}", Move::list_to_uci_string(&moves)));
|
||||
if let Some(focus) = &args.focus {
|
||||
self.log(format!("Focus on: {}", focus.to_uci_string()));
|
||||
}
|
||||
self.log(format!("Move time: {}", self.time_limit));
|
||||
}
|
||||
|
||||
|
|
|
@ -64,6 +64,8 @@ pub enum Cmd {
|
|||
WorkerBestMove(Option<Move>),
|
||||
/// Log current node.
|
||||
LogNode,
|
||||
/// Log debug information about a move.
|
||||
LogMove(Move),
|
||||
|
||||
// Commands that can be sent by the engine.
|
||||
|
||||
|
@ -127,15 +129,8 @@ impl Engine {
|
|||
Cmd::WorkerInfo(infos) => self.reply(Cmd::Info(infos.to_vec())),
|
||||
Cmd::WorkerBestMove(m) => self.reply(Cmd::BestMove(m.clone())),
|
||||
// Other commands.
|
||||
Cmd::LogNode => {
|
||||
let mut s = vec!();
|
||||
self.node.board.draw_to(&mut s);
|
||||
self.reply(Cmd::Log(format!(
|
||||
"Current node:\n{}{}",
|
||||
String::from_utf8_lossy(&s),
|
||||
self.node.game_state
|
||||
)));
|
||||
}
|
||||
Cmd::LogNode => self.log_node(),
|
||||
Cmd::LogMove(m) => self.log_move(m),
|
||||
_ => eprintln!("Not an engine input command: {:?}", cmd),
|
||||
}
|
||||
}
|
||||
|
@ -208,10 +203,7 @@ impl Engine {
|
|||
fn stop(&mut self) {
|
||||
self.working.store(false, atomic::Ordering::SeqCst);
|
||||
}
|
||||
}
|
||||
|
||||
/// UCI commands management.
|
||||
impl Engine {
|
||||
/// Setup engine for UCI communication.
|
||||
pub fn setup_uci(&mut self, uci_s: mpsc::Sender<uci::Cmd>) {
|
||||
// Create a channel to receive commands from Uci.
|
||||
|
@ -241,13 +233,7 @@ impl Engine {
|
|||
|
||||
/// Start working using parameters passed with a "go" command.
|
||||
fn uci_go(&mut self, g_args: &Vec<uci::GoArgs>) {
|
||||
let mut args = analysis::AnalysisParams {
|
||||
move_time: -1,
|
||||
white_time: -1,
|
||||
black_time: -1,
|
||||
white_inc: -1,
|
||||
black_inc: -1,
|
||||
};
|
||||
let mut args = analysis::AnalysisParams::new();
|
||||
for arg in g_args {
|
||||
match arg {
|
||||
uci::GoArgs::MoveTime(ms) => args.move_time = *ms,
|
||||
|
@ -261,4 +247,22 @@ impl Engine {
|
|||
}
|
||||
self.work(&args);
|
||||
}
|
||||
|
||||
/// Log current node information.
|
||||
fn log_node(&mut self) {
|
||||
let mut s = vec!();
|
||||
self.node.board.draw_to(&mut s);
|
||||
self.reply(Cmd::Log(format!(
|
||||
"Current node:\n{}{}",
|
||||
String::from_utf8_lossy(&s),
|
||||
self.node.game_state
|
||||
)));
|
||||
}
|
||||
|
||||
/// Log a move information.
|
||||
fn log_move(&mut self, m: &Move) {
|
||||
let mut args = analysis::AnalysisParams::new();
|
||||
args.focus = Some(m.clone());
|
||||
self.work(&args);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -60,6 +60,7 @@ pub enum UciCmd {
|
|||
|
||||
// Unofficial commands mostly for debugging.
|
||||
VatuNode,
|
||||
VatuMove(String),
|
||||
|
||||
Unknown(String),
|
||||
}
|
||||
|
@ -205,6 +206,9 @@ impl Uci {
|
|||
UciCmd::VatuNode => {
|
||||
self.send_engine_command(engine::Cmd::LogNode);
|
||||
}
|
||||
UciCmd::VatuMove(m) => {
|
||||
self.send_engine_command(engine::Cmd::LogMove(Move::from_uci_string(m)));
|
||||
}
|
||||
UciCmd::Unknown(c) => { self.log(format!("Unknown command: {}", c)); }
|
||||
}
|
||||
true
|
||||
|
@ -316,6 +320,7 @@ fn parse_command(s: &str) -> UciCmd {
|
|||
"go" => parse_go_command(&fields[1..]),
|
||||
"quit" => UciCmd::Quit,
|
||||
"vatunode" => UciCmd::VatuNode,
|
||||
"vatumove" => UciCmd::VatuMove(fields[1].to_string()),
|
||||
c => UciCmd::Unknown(c.to_string()),
|
||||
}
|
||||
}
|
||||
|
|
Reference in a new issue