00001 #ifndef QTGNUCHESSCONTROLER_HPP 00002 #define QTGNUCHESSCONTROLER_HPP 00003 00004 #include "Controler.hpp" 00005 #include "Game/Boards/ChessBoard.hpp" 00006 00007 #include <QObject> 00008 #include <QProcess> 00009 00010 #include <cassert> 00011 00012 class QtGNUChessControler : public QObject , public Controler<ChessBoard> 00013 { 00014 Q_OBJECT 00015 00016 private: 00017 00018 static const QString m_gnuChessPath; 00019 00020 QProcess m_process; 00021 bool m_isStarted; 00022 00023 void sendCommand(const std::string& command); 00024 00025 Q_SLOT void errorOccured(QProcess::ProcessError); 00026 00027 public: 00028 QtGNUChessControler(); 00029 ~QtGNUChessControler(); 00030 00035 void start(); 00036 Move<ChessBoard::Coords> getMove(); 00037 00038 void notify(const Move<ChessBoard::Coords> & move); 00039 00044 void setColorControled(int color) 00045 { 00046 assert(m_isStarted); 00047 00048 m_colorControlled = color; 00049 if ( color == 0 ) 00050 { 00051 sendCommand("white"); 00052 sendCommand("go"); 00053 } 00054 } 00055 00056 static bool checkAvailability(); 00057 }; 00058 00068 #endif