// Should be called // * when a hand is over // * when it is my turn (summary in the log) void CHandHistoryWriter::WriteHistory() { write_log_separator(true, "Summary (might be not accurate)"); for (int i=0; i<_lines_collected; ++i) { write_log(true, (char*)(LPCTSTR)_handhistory_data[i]); } write_log_separator(true, ""); _lines_collected = 0; }
void CAutoplayerTrace::LogAutoPlayerTrace() { if (!preferences.trace_enabled() || (_symboltrace_collection.GetSize() <= 0)) { return; } write_log_separator(true, "Autoplayer Trace"); for (int i=0; i<_symboltrace_collection.GetSize(); ++i) { write_log_nostamp(true, "%s\n", _symboltrace_collection.GetAt(i)); } write_log_separator(true, ""); }
void start_log(void) { if (log_fp!=NULL) return; CSLock lock(log_critsec); CString fn = p_filenames->LogFilename(); // Check, if file exists and size is too large struct stat file_stats = { 0 }; if (stat(fn.GetString(), &file_stats) == 0) { unsigned long int max_file_size = 1E06 * preferences.log_max_logsize(); size_t file_size = file_stats.st_size; if (file_size > max_file_size) { remove(fn.GetString()); } } // Append (or create) log if ((log_fp = _fsopen(fn.GetString(), "a", _SH_DENYWR)) != 0) { write_log_separator(k_always_log_basic_information, "LOG FILE OPEN"); fflush(log_fp); } }
void stop_log(void) { write_footer_if_necessary(); if (log_fp == NULL) return; write_log_separator(k_always_log_basic_information, "LOG FILE CLOSED"); fclose(log_fp); log_fp = NULL; }
void CAutoplayerTrace::LogSecondaryAction(const char *action_taken) { write_log_separator(true, "Secondary Action"); write_log(k_always_log_basic_information, " Action taken: %s\n", action_taken); write_log_separator(true, ""); }
void CAutoplayerTrace::LogBasicInfo(const char *action_taken) { CString pcards, comcards, temp, rank, pokerhand; CString fcra_formula_status; int userchair = p_symbol_engine_userchair->userchair(); int betround = p_betround_calculator->betround(); // player cards if (p_symbol_engine_userchair->userchair_confirmed()) { for (int i=0; i<=1; i++) { Card card = p_table_state->User()->_hole_cards[i]; pcards.Append(card.ToString()); } } else { pcards = "...."; } // common cards comcards = ""; if (betround >= kBetroundFlop) { for (int i=0; i<kNumberOfFlopCards; i++) { if (p_table_state->_common_cards[i].IsKnownCard()) { comcards.Append(p_table_state->_common_cards[i].ToString()); } } } if (betround >= kBetroundTurn) { comcards.Append(p_table_state->_common_cards[3].ToString()); } if (betround >= kBetroundRiver) { comcards.Append(p_table_state->_common_cards[4].ToString()); } comcards.Append(".........."); comcards = comcards.Left(10); // Always use handrank169 here rank.Format("%.0f", p_symbol_engine_handrank->handrank169()); // poker hand pokerhand = p_symbol_engine_pokerval->HandType(); // fcra_seen CString fcra_seen = p_symbol_engine_autoplayer->GetFCKRAString(); // fcra formula status fcra_formula_status.Format("%s%s%s%s%s", p_function_collection->EvaluateAutoplayerFunction(k_autoplayer_function_fold) ? "F" : ".", p_function_collection->EvaluateAutoplayerFunction(k_autoplayer_function_call) ? "C" : ".", p_function_collection->EvaluateAutoplayerFunction(k_autoplayer_function_check) ? "K" : ".", p_function_collection->EvaluateAutoplayerFunction(k_autoplayer_function_raise) ? "R" : ".", p_function_collection->EvaluateAutoplayerFunction(k_autoplayer_function_allin) ? "A" : "."); // More verbose summary in the log // The old WinHoldem format was a complete mess write_log_separator(true, "Basic Info"); write_log(k_always_log_basic_information, " Version: %s\n", VERSION_TEXT); write_log(k_always_log_basic_information, " Chairs: %5d\n", p_tablemap->nchairs()); write_log(k_always_log_basic_information, " Userchair: %5d\n", userchair); write_log(k_always_log_basic_information, " Holecards: %s\n", pcards.GetString()); write_log(k_always_log_basic_information, " Community: %s\n", comcards.GetString()); write_log(k_always_log_basic_information, " Handrank: %s\n", rank.GetString()); write_log(k_always_log_basic_information, " Hand: %s\n", pokerhand.GetString()); write_log(k_always_log_basic_information, " My balance: %9.2f\n", p_table_state->User()->_balance); write_log(k_always_log_basic_information, " My currentbet: %9.2f\n", p_table_state->User()->_bet); write_log(k_always_log_basic_information, " To call: %9.2f\n", p_symbol_engine_chip_amounts->call()); write_log(k_always_log_basic_information, " Pot: %9.2f\n", p_symbol_engine_chip_amounts->pot()); write_log(k_always_log_basic_information, " Big blind: %9.2f\n", p_symbol_engine_tablelimits->bblind()); write_log(k_always_log_basic_information, " Big bet (FL): %9.2f\n", p_symbol_engine_tablelimits->bigbet()); write_log(k_always_log_basic_information, " f$betsize: %9.2f\n", p_function_collection->EvaluateAutoplayerFunction(k_autoplayer_function_betsize)); write_log(k_always_log_basic_information, " Formulas: %s\n", fcra_formula_status.GetString()); write_log(k_always_log_basic_information, " Buttons: %s\n", fcra_seen.GetString()); write_log(k_always_log_basic_information, " Best action: %s\n", BestAction().GetString()); write_log(k_always_log_basic_information, " Action taken: %s\n", action_taken); write_log_separator(true, ""); // Also show "BestAction" in the statusbar. // This needs to be set exactly once to avoid multiple evaluations // of the autoplayer functions p_openholdem_statusbar->SetLastAction(BestAction()); }