Add flags for mismatch type to client desync log

This commit is contained in:
Jonathan G Rennison
2019-08-20 20:47:17 +01:00
parent ec892879f4
commit 459a49cb24
7 changed files with 46 additions and 14 deletions

View File

@@ -449,12 +449,22 @@ char *CrashLog::FillCrashLog(char *buffer, const char *last) const
* @param last The last position in the buffer to write to.
* @return the position of the \c '\0' character after the buffer.
*/
char *CrashLog::FillDesyncCrashLog(char *buffer, const char *last) const
char *CrashLog::FillDesyncCrashLog(char *buffer, const char *last, const DesyncExtraInfo &info) const
{
time_t cur_time = time(nullptr);
buffer += seprintf(buffer, last, "*** OpenTTD Multiplayer %s Desync Report ***\n\n", _network_server ? "Server" : "Client");
buffer += seprintf(buffer, last, "Desync at: %s", asctime(gmtime(&cur_time)));
if (!_network_server && info.flags) {
auto flag_check = [&](DesyncExtraInfo::Flags flag, const char *str) {
return info.flags & flag ? str : "";
};
buffer += seprintf(buffer, last, "Flags: %s%s%s%s\n",
flag_check(DesyncExtraInfo::DEIF_RAND1, "R"),
flag_check(DesyncExtraInfo::DEIF_RAND2, "Z"),
flag_check(DesyncExtraInfo::DEIF_STATE, "S"),
flag_check(DesyncExtraInfo::DEIF_DBL_RAND, "D"));
}
YearMonthDay ymd;
ConvertDateToYMD(_date, &ymd);
@@ -627,7 +637,7 @@ bool CrashLog::MakeCrashLog() const
* information like paths to the console.
* @return true when everything is made successfully.
*/
bool CrashLog::MakeDesyncCrashLog(const std::string *log_in, std::string *log_out) const
bool CrashLog::MakeDesyncCrashLog(const std::string *log_in, std::string *log_out, const DesyncExtraInfo &info) const
{
char filename[MAX_PATH];
char buffer[65536 * 2];
@@ -641,7 +651,7 @@ bool CrashLog::MakeDesyncCrashLog(const std::string *log_in, std::string *log_ou
strftime(name_buffer_date, lastof(name_buffer) - name_buffer_date, "%Y%m%dT%H%M%SZ", gmtime(&cur_time));
printf("Desync encountered (%s), generating desync log...\n", mode);
char *b = this->FillDesyncCrashLog(buffer, lastof(buffer));
char *b = this->FillDesyncCrashLog(buffer, lastof(buffer), info);
if (log_in && !log_in->empty()) {
b = strecpy(b, "\n", lastof(buffer), true);