#!/usr/bin/ruby =begin API for calling DMChess engine written in c++ =end require 'socket' class DMChess DMCHESS="/opt/chess_bin/bin/main" def initialize port=16099 @port = port unless File.exist?(DMCHESS) raise "Can't find dmchess at: "+DMCHESS end #puts 'Starting TcpServer at port '+@port.to_s Thread.new do puts `#{DMCHESS} tcp_server #{@port}` end sleep 4 @dmchess = TCPSocket.new 'localhost', @port end #"true" / "false" def is_mate fen @dmchess.puts "is_mate #{fen}\r\n" @dmchess.gets.chomp end def bool_is_mate fen @dmchess.puts "is_mate #{fen}\r\n" x = @dmchess.gets.chomp return true if x == "true" return false if x == "false" raise "DmChess bool_is_mate error for fen #{fen} : "+x.to_s end def moves_and_fens fen @dmchess.puts "show_moves_and_fens #{fen}\r\n" resp = @dmchess.gets.chomp r2 = resp.split(';').map{ |x| x.split("|") } r2 end def apply_long_move_w_short lmove, fen @dmchess.puts "apply_long_move_w_short #{lmove} #{fen}\r\n" resp = @dmchess.gets.chomp r2 = resp.split("|") r2 end def move_name f1,f2 @dmchess.puts "move_name #{f1} #{f2}\r\n" resp = @dmchess.gets.chomp end def shorten_move move, fen raise "Empty FEN" if fen=="" raise "Empty move" if move=="" @dmchess.puts "shorten_move #{move} #{fen}\r\n" resp = @dmchess.gets.chomp end def apply_move fen, move @dmchess.puts "apply_move #{move} #{fen}\r\n" resp = @dmchess.gets.chomp end end