void ChessGame::onResultClaim(const Chess::Result& result) { if (m_finished) return; ChessPlayer* sender = qobject_cast<ChessPlayer*>(QObject::sender()); Q_ASSERT(sender != 0); if (!m_gameInProgress && result.winner().isNull()) { qWarning("Unexpected result claim from %s: %s", qPrintable(sender->name()), qPrintable(result.toVerboseString())); } else if (sender->areClaimsValidated() && result.loser() != sender->side()) { qWarning("%s forfeits by invalid result claim: %s", qPrintable(sender->name()), qPrintable(result.toVerboseString())); m_result = Chess::Result(Chess::Result::Adjudication, sender->side().opposite(), "Invalid result claim"); } else m_result = result; stop(); }
void ChessGame::onResultClaim(const Chess::Result& result) { if (m_finished) return; ChessPlayer* sender = qobject_cast<ChessPlayer*>(QObject::sender()); Q_ASSERT(sender != nullptr); if (result.type() == Chess::Result::Disconnection) { // The engine may not be properly started so we have to // figure out the player's side this way Chess::Side side(Chess::Side::White); if (m_player[side] != sender) side = Chess::Side::Black; m_result = Chess::Result(result.type(), side.opposite()); } else if (!m_gameInProgress && result.winner().isNull()) { qWarning("Unexpected result claim from %s: %s", qPrintable(sender->name()), qPrintable(result.toVerboseString())); } else if (sender->areClaimsValidated() && result.loser() != sender->side()) { qWarning("%s forfeits by invalid result claim: %s", qPrintable(sender->name()), qPrintable(result.toVerboseString())); m_result = Chess::Result(Chess::Result::Adjudication, sender->side().opposite(), "Invalid result claim"); } else m_result = result; stop(); }
void XboardEngine::endGame(const Chess::Result& result) { State s = state(); if (s != Thinking && s != Observing) return; if (s != Thinking) m_gotResult = true; stopThinking(); setForceMode(true); write("result " + result.toVerboseString()); ChessEngine::endGame(result); // If the engine can't be pinged, we may have to wait for // for a move or a result, or an error, or whatever. We // would like to extend our middle fingers to every engine // developer who fails to support the ping command. if (!m_ftPing && m_gotResult) finishGame(); }