binlog reader no longer logs plugin database in a separate file

This commit is contained in:
David Anderson 2006-03-19 21:41:11 +00:00
parent dc9350fcc5
commit f55a8c54cc
4 changed files with 49 additions and 58 deletions

View File

@ -45,8 +45,27 @@ bool BinLog::Open()
} }
build_pathname_r(file, sizeof(file)-1, "%s/binlogs/binlog%04d.blg", data, lastcntr); build_pathname_r(file, sizeof(file)-1, "%s/binlogs/binlog%04d.blg", data, lastcntr);
m_logfile.assign(file); m_logfile.assign(file);
build_pathname_r(file, sizeof(file)-1, "%s/binlogs/bindb%04d.bdb", data, lastcntr);
m_dbfile.assign(file); /**
* it's now safe to create the binary log
*/
FILE *fp = fopen(m_logfile.c_str(), "wb");
if (!fp)
return false;
int magic = BINLOG_MAGIC;
short vers = BINLOG_VERSION;
char c = sizeof(time_t);
fwrite(&magic, sizeof(int), 1, fp);
fwrite(&vers, sizeof(short), 1, fp);
fwrite(&c, sizeof(char), 1, fp);
WritePluginDB(fp);
fclose(fp);
m_state = true;
WriteOp(BinLog_Start, -1);
return true; return true;
} }
@ -54,10 +73,14 @@ bool BinLog::Open()
void BinLog::Close() void BinLog::Close()
{ {
WriteOp(BinLog_End, -1); WriteOp(BinLog_End, -1);
m_state = false;
} }
void BinLog::WriteOp(BinLogOp op, int plug, ...) void BinLog::WriteOp(BinLogOp op, int plug, ...)
{ {
if (!m_state)
return;
FILE *fp = fopen(m_logfile.c_str(), "ab"); FILE *fp = fopen(m_logfile.c_str(), "ab");
if (!fp) if (!fp)
return; return;
@ -70,7 +93,6 @@ void BinLog::WriteOp(BinLogOp op, int plug, ...)
fclose(fp); fclose(fp);
Close(); Close();
Open(); Open();
CacheAllPlugins();
fp = fopen(m_logfile.c_str(), "ab"); fp = fopen(m_logfile.c_str(), "ab");
if (!fp) if (!fp)
return; return;
@ -187,18 +209,8 @@ void BinLog::WriteOp(BinLogOp op, int plug, ...)
fclose(fp); fclose(fp);
} }
void BinLog::CacheAllPlugins() void BinLog::WritePluginDB(FILE *fp)
{ {
FILE *fp = fopen(m_dbfile.c_str(), "wb");
if (!fp)
return;
unsigned int magic = BINDB_MAGIC;
unsigned short vers = BINDB_VERSION;
fwrite(&magic, sizeof(unsigned int), 1, fp);
fwrite(&vers, sizeof(unsigned short), 1, fp);
int num = g_plugins.getPluginsNum(); int num = g_plugins.getPluginsNum();
fwrite(&num, sizeof(int), 1, fp); fwrite(&num, sizeof(int), 1, fp);
@ -243,24 +255,6 @@ void BinLog::CacheAllPlugins()
fwrite(name, sizeof(char), len, fp); fwrite(name, sizeof(char), len, fp);
} }
} }
fclose(fp);
/**
* it's now safe to create the binary log
*/
fp = fopen(m_logfile.c_str(), "wb");
if (!fp)
return;
magic = BINLOG_MAGIC;
vers = BINLOG_VERSION;
c = sizeof(time_t);
fwrite(&magic, sizeof(int), 1, fp);
fwrite(&vers, sizeof(short), 1, fp);
fwrite(&c, sizeof(char), 1, fp);
fclose(fp);
WriteOp(BinLog_Start, -1);
} }
#endif //BINLOG_ENABLED #endif //BINLOG_ENABLED

View File

@ -6,25 +6,13 @@
#include "CString.h" #include "CString.h"
#define BINLOG_MAGIC 0x414D424C #define BINLOG_MAGIC 0x414D424C
#define BINLOG_VERSION 0x0100 #define BINLOG_VERSION 0x0200
#define BINDB_MAGIC 0x414D4244
#define BINDB_VERSION 0x0100
/** /**
* Format of binlog: * Format of binlog:
* uint32 magic * uint32 magic
* uint16 version * uint16 version
* uint8 sizeof(time_t) * uint8 sizeof(time_t)
* [
* uint8 operation code
* time_t realtime
* float gametime
* int32 plugin id
* <extra info>
* ]
* Format of bindb:
* uint32 magic
* uint16 version
* uint32 num plugins * uint32 num plugins
* [ * [
* uint8 status codes * uint8 status codes
@ -37,6 +25,14 @@
* [ * [
* str[uint8] public name * str[uint8] public name
* ] * ]
* ]
* [
* uint8 operation code
* time_t realtime
* float gametime
* int32 plugin id
* <extra info>
* ]
*/ */
enum BinLogOp enum BinLogOp
@ -57,14 +53,19 @@ enum BinLogOp
class BinLog class BinLog
{ {
public:
BinLog() : m_state(false)
{
};
public: public:
bool Open(); bool Open();
void Close(); void Close();
void CacheAllPlugins();
void WriteOp(BinLogOp op, int plug, ...); void WriteOp(BinLogOp op, int plug, ...);
private: private:
String m_dbfile; void WritePluginDB(FILE *fp);
private:
String m_logfile; String m_logfile;
bool m_state;
}; };
extern BinLog g_BinLog; extern BinLog g_BinLog;

View File

@ -292,15 +292,6 @@ int C_Spawn(edict_t *pent)
// Set server flags // Set server flags
memset(g_players[0].flags, -1, sizeof(g_players[0].flags)); memset(g_players[0].flags, -1, sizeof(g_players[0].flags));
#if defined BINLOG_ENABLED
if (!g_BinLog.Open())
{
LOG_ERROR(PLID, "Binary log failed to open.");
}
g_binlog_level = atoi(get_localinfo("bin_logging", "17"));
g_binlog_maxsize = atoi(get_localinfo("g_binlog_maxsize", "20"));
#endif
g_opt_level = atoi(get_localinfo("optimizer", "7")); g_opt_level = atoi(get_localinfo("optimizer", "7"));
if (!g_opt_level) if (!g_opt_level)
g_opt_level = 7; g_opt_level = 7;
@ -325,7 +316,12 @@ int C_Spawn(edict_t *pent)
FF_ChangeLevel = registerForward("server_changelevel", ET_STOP, FP_STRING, FP_DONE); FF_ChangeLevel = registerForward("server_changelevel", ET_STOP, FP_STRING, FP_DONE);
#if defined BINLOG_ENABLED #if defined BINLOG_ENABLED
g_BinLog.CacheAllPlugins(); if (!g_BinLog.Open())
{
LOG_ERROR(PLID, "Binary log failed to open.");
}
g_binlog_level = atoi(get_localinfo("bin_logging", "17"));
g_binlog_maxsize = atoi(get_localinfo("binlog_maxsize", "20"));
#endif #endif
modules_callPluginsLoaded(); modules_callPluginsLoaded();

View File

@ -614,7 +614,7 @@
AdditionalDependencies="..\zlib\zlib.lib ..\JIT\amxjitsn.obj ..\JIT\amxexecn.obj ..\JIT\natives-x86.obj" AdditionalDependencies="..\zlib\zlib.lib ..\JIT\amxjitsn.obj ..\JIT\amxexecn.obj ..\JIT\natives-x86.obj"
OutputFile="jitdebugbinlog/amxmodx_mm.dll" OutputFile="jitdebugbinlog/amxmodx_mm.dll"
Version="0.1" Version="0.1"
LinkIncremental="1" LinkIncremental="2"
SuppressStartupBanner="TRUE" SuppressStartupBanner="TRUE"
AdditionalLibraryDirectories="..\extra\lib_win32" AdditionalLibraryDirectories="..\extra\lib_win32"
IgnoreDefaultLibraryNames="MSVCRT" IgnoreDefaultLibraryNames="MSVCRT"