#include "stdafx.h"
#include <memory.h>
#include <bitset>
enum BIT_FLAG
{
BIT_RECTIME = 0,
BIT_SRC,
BIT_DST,
BIT_SENDTIME
};
typedef struct Recoder
{
SYSTEMTIME recTime;
unsigned __int32 SrcIP;
unsigned __int16 SrcPort;
unsigned __int32 DstIP;
unsigned __int16 DstPort;
SYSTEMTIME sendTime;
}Recoder;
const int BUFFER_LEN = 1024;
class TracyLog
{
public:
TracyLog()
{
memset( m_RecoderBuffer, 0, sizeof(m_RecoderBuffer) );
memset( m_LocalBuffer, 0, sizeof(m_LocalBuffer) );
memset( &m_Recorder, 0, sizeof(m_Recorder) );
}
~TracyLog()
{
}
void Reset()
{
m_iID = 0;
memset( m_RecoderBuffer, 0, sizeof(m_RecoderBuffer) );
memset( m_LocalBuffer, 0, sizeof(m_LocalBuffer) );
memset( &m_Recorder, 0, sizeof(m_Recorder) );
m_bitFlag.reset();
}
void SetReceiveTime()
{
m_bitFlag.set( BIT_RECTIME );
GetSystemTime( &m_Recorder.recTime );
}
void SetSendTime()
{
m_bitFlag.set( BIT_SENDTIME );
GetSystemTime( &m_Recorder.sendTime );
}
void SetID(int ID)
{
m_iID = ID;
}
void SetSource()
{
m_bitFlag.set(BIT_SRC);
m_Recorder.SrcIP = 20197125;
m_Recorder.SrcPort = 7780;
}
void SetDst()
{
m_bitFlag.set(BIT_DST);
m_Recorder.DstIP = 20019825;
m_Recorder.DstPort = 7777;
}
char* GetBuffer()
{
if( m_bitFlag.test( BIT_RECTIME ) )
{
sprintf_s( m_RecoderBuffer, BUFFER_LEN, "/r/n%04d%02d%02d,%02d%02d%02d:%06d",
m_Recorder.recTime.wYear, m_Recorder.recTime.wMonth, m_Recorder.recTime.wDay,
m_Recorder.recTime.wHour, m_Recorder.recTime.wMinute, m_Recorder.recTime.wSecond, m_Recorder.recTime.wMilliseconds );
}
else
{
sprintf_s( m_RecoderBuffer, BUFFER_LEN, "/r/n," );
}
if( m_bitFlag.test( BIT_SRC ) )
{
in_addr addr;
addr.S_un.S_addr = m_Recorder.SrcIP;
sprintf_s( m_LocalBuffer, BUFFER_LEN,",%s:%d", inet_ntoa( addr ), m_Recorder.SrcPort );
strcat( m_RecoderBuffer, m_LocalBuffer );
}
else
{
sprintf_s( m_LocalBuffer, BUFFER_LEN,"," );
strcat( m_RecoderBuffer, m_LocalBuffer );
}
if( m_bitFlag.test( BIT_DST ) )
{
in_addr addr;
addr.S_un.S_addr = m_Recorder.DstIP;
sprintf_s( m_LocalBuffer, BUFFER_LEN,",%s:%d", inet_ntoa( addr ), m_Recorder.DstPort );
strcat( m_RecoderBuffer, m_LocalBuffer );
}
else
{
sprintf_s( m_LocalBuffer, BUFFER_LEN,"," );
strcat( m_RecoderBuffer, m_LocalBuffer );
}
if( m_bitFlag.test( BIT_SENDTIME ) )
{
sprintf_s( m_LocalBuffer, BUFFER_LEN, ",%04d%02d%02d,%02d%02d%02d:%06d",
m_Recorder.sendTime.wYear, m_Recorder.sendTime.wMonth, m_Recorder.sendTime.wDay,
m_Recorder.sendTime.wHour, m_Recorder.sendTime.wMinute, m_Recorder.sendTime.wSecond, m_Recorder.sendTime.wMilliseconds );
strcat( m_RecoderBuffer, m_LocalBuffer );
}
else
{
sprintf_s( m_LocalBuffer, BUFFER_LEN,",," );
strcat( m_RecoderBuffer, m_LocalBuffer );
}
sprintf_s( m_LocalBuffer, BUFFER_LEN,",%d", m_iID );
strcat( m_RecoderBuffer, m_LocalBuffer );
return m_RecoderBuffer;
}
private:
int m_iID;
char m_RecoderBuffer[BUFFER_LEN];
char m_LocalBuffer[BUFFER_LEN];
Recoder m_Recorder;
std::bitset< 20 > m_bitFlag;
};
int _tmain(int argc, char* argv[])
{
FILE* LogFile = nullptr;
LogFile = fopen( "c://Hector//logFile.log", "wb" );
TracyLog LogIns;
for( int i = 0; i < 9000; ++i )
{
LogIns.Reset();
LogIns.SetID( i );
LogIns.SetReceiveTime();
LogIns.SetSource();
LogIns.SetDst();
if( 0 == i%5 )
{
in_addr addr;
addr.S_un.S_addr = 41598986;
inet_ntoa( in_addr(addr) );
}
LogIns.SetSendTime();
char* pBuffer = LogIns.GetBuffer();
size_t len = strlen( pBuffer );
fwrite( pBuffer, sizeof(unsigned char), len, LogFile );
}
fclose( LogFile );
return 0;
}