⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 logalertdoc.cpp

📁 根据系统设定的日志类型,来判断用户操作的日志是否违规,形成报警
💻 CPP
字号:
// LogAlertDoc.cpp :  CLogAlertDoc 类的实现
//

#include "stdafx.h"
#include "LogAlert.h"

#include "LogAlertDoc.h"
#include "MainFrm.h"
#include "View_RunLog.h"
#include "View_SvrLog.h"
#include "Dlg_Run_Setting.h"
#include "Registry.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// CLogAlertDoc

IMPLEMENT_DYNCREATE(CLogAlertDoc, CDocument)

BEGIN_MESSAGE_MAP(CLogAlertDoc, CDocument)
	ON_COMMAND(ID_RUN_START, OnRunStart)
	ON_COMMAND(ID_RUN_STOP, OnRunStop)
	ON_COMMAND(ID_RUN_PARAM, OnRunParam)
END_MESSAGE_MAP()


// CLogAlertDoc 构造/析构

CLogAlertDoc::CLogAlertDoc()
{
	// TODO: 在此添加一次性构造代码
	m_dwNeedBeep=0;
}

CLogAlertDoc::~CLogAlertDoc()
{
}

BOOL CLogAlertDoc::OnNewDocument()
{
	if (!CDocument::OnNewDocument())
		return FALSE;

	// TODO: 在此添加重新初始化代码,从文件中读取相关配置
	m_set.InitDefault();
	//从注册表读取
	LOGALERTSET tempSet;
	DWORD dwSize=sizeof(m_set);
	if (CRegistry::RegGetBinaryKeyValue(HKEY_LOCAL_MACHINE,"Software\\WonderSoft\\LogAlert","Setting",(char*)&tempSet,dwSize))
	{
		m_set.Init(tempSet);
	}
	//设置到其他组件
	CView_RunLog::m_dwLogLimit=m_set.dwLogMaxCount_Run;
	CView_SvrLog::m_dwLogLimit=m_set.dwLogMaxCount_Svr;

	AfxBeginThread(Thread_Connect_Server,this);
	AfxBeginThread(Thread_Beep,this);

	// (SDI 文档将重用该文档)

	return TRUE;
}

// CLogAlertDoc 序列化

void CLogAlertDoc::Serialize(CArchive& ar)
{
	if (ar.IsStoring())
	{
		// TODO: 在此添加存储代码
		ar.Write(&m_set,sizeof(m_set));
	}
	else
	{
		// TODO: 在此添加加载代码
		ar.Read(&m_set,sizeof(m_set));
	}
}


// CLogAlertDoc 诊断

#ifdef _DEBUG
void CLogAlertDoc::AssertValid() const
{
	CDocument::AssertValid();
}

void CLogAlertDoc::Dump(CDumpContext& dc) const
{
	CDocument::Dump(dc);
}
#endif //_DEBUG


// CLogAlertDoc 命令

CLogAlertDoc* CLogAlertDoc::GetCurrentDocument(void)
{
	return (CLogAlertDoc*)((CMainFrame*) AfxGetApp()->m_pMainWnd)->GetActiveDocument();
}

UINT CLogAlertDoc::Thread_Connect_Server(LPVOID pParam)
{
	CLogAlertDoc* pNowDoc=(CLogAlertDoc*)pParam;
	DWORD dwCount=0;
	APPPACKAGE AppPacket;
	SOCKET s=INVALID_SOCKET;
	UINT Ret=E_KEYOPT_SUCCESS;
	CLTLOGINFO cli;
	DEVLOGINFO dli;
	LOGINFO li;
	DATACLTLT dcl;
	DATAKEYLT dkl;
	DATADEVLT ddl;
	CByteArray ba;
	DWORD dwbaCount;
	DWORD dwNow;
	BYTE* bNow;
	
	//开始进行连接
_Thread_Connect_Server_Start:
	Sleep(1000);
	dwCount++;
	while (!(pNowDoc->m_set.bRun))
	{
		Sleep(100);
	}
	//关闭连接
	if (s!=INVALID_SOCKET) 
	{
		g_key.Socket_Close(s);
		s=INVALID_SOCKET;
	}
	//连接服务器
	CView_RunLog::Log_Add("Connecting... %X",dwCount);
	Ret=g_key.Socket_Connect_Client(pNowDoc->m_set.cServerName,TIS_PORT_MMC_ALERT,s);
	if (E_KEYOPT_SUCCESS==Ret)
	{
		AppPacket.SetHeader(TIS_MGMTTYPE_MMC_ALERT,TIS_FLOWDIR_SVR2ALT,TIS_CMDTYPE_MMC_ALERT_CONNECT);
		AppPacket.SetContent(NULL,0);
		CView_RunLog::Log_Add("Connected... ");
		Ret=g_key.Socket_Send(s,AppPacket);
	}
	DWORD dwLogType=-1;
	BOOL bIsLogSys=TRUE;
	BOOL bAdd=FALSE;
	BOOL bBeep=FALSE;
	BOOL bEmail=FALSE;
	BOOL bSMS=FALSE;
	while ((pNowDoc->m_set.bRun)&&(E_KEYOPT_SUCCESS==Ret))
	{
		Ret=g_key.Socket_Receive_Timeout(s,AppPacket,30*1000);
		dwLogType=-1;
		bIsLogSys=TRUE;
		bAdd=FALSE;
		bBeep=FALSE;
		bEmail=FALSE;
		bSMS=FALSE;
		if (E_KEYOPT_SUCCESS==Ret)
		{//处理消息
			if (TIS_CMDTYPE_MMC_ALERT_LOG_SYS==AppPacket.Header.wCmdType)
			{
				AppPacket.GetContent(&li,sizeof(li));
				//看系统日志是否需要添加
				if (E_KEYOPT_SUCCESS==li.dwRet)
				{
					dwLogType=LOG_TYPE_MMC_NORMAL;
					bIsLogSys=TRUE;
				}
				else
				{
					dwLogType=LOG_TYPE_MMC_ERROR;
					bIsLogSys=TRUE;
				}
				if (bAdd) CView_SvrLog::Log_Add(li);
			}
			else if (TIS_CMDTYPE_MMC_ALERT_LOG_CLT==AppPacket.Header.wCmdType)
			{
				AppPacket.GetContent(&cli,sizeof(cli));
				if (1==cli.dwErrorType)
				{
					dwLogType=LOG_TYPE_CLT_NORMAL;
					bIsLogSys=FALSE;
				}
				else if (2==cli.dwErrorType)
				{
					dwLogType=LOG_TYPE_CLT_ERROR;
					bIsLogSys=FALSE;
				}
			}
			else if (TIS_CMDTYPE_MMC_ALERT_LOG_DEV==AppPacket.Header.wCmdType)
			{
				AppPacket.GetContent(&dli,sizeof(dli));
				if (1==dli.dwErrorType)
				{
					dwLogType=LOG_TYPE_DEV_NORMAL;
					bIsLogSys=FALSE;
				}
				else if (2==dli.dwErrorType)
				{
					dwLogType=LOG_TYPE_DEV_ERROR;
					bIsLogSys=FALSE;
				}
			}
			else if (TIS_CMDTYPE_MMC_ALERT_CLT_TIS==AppPacket.Header.wCmdType)
			{//发送客户端信息
				AppPacket.GetContent(ba);
				dwbaCount=ba.GetCount();
				if (dwbaCount>0)
				{
					dwNow=0;
					bNow=ba.GetData();
					while(dwNow<dwbaCount)
					{
						memcpy(&dcl,bNow,sizeof(dcl));
						if (dcl.dwNodeId>0)
						{
							CView_SvrLog::Info_Add(dcl);
						}
						dwNow+=sizeof(dcl);
						bNow+=sizeof(dcl);
					}
				}
			}
			else if (TIS_CMDTYPE_MMC_ALERT_KEY_TIS==AppPacket.Header.wCmdType)
			{//发送令牌信息
				AppPacket.GetContent(ba);
				dwbaCount=ba.GetCount();
				if (dwbaCount>0)
				{
					dwNow=0;
					bNow=ba.GetData();
					while(dwNow<dwbaCount)
					{
						memcpy(&dkl,bNow,sizeof(dkl));
						if (dkl.dwNodeId>0)
						{
							CView_SvrLog::Info_Add(dkl);
						}
						dwNow+=sizeof(dkl);
						bNow+=sizeof(dkl);
					}
				}
			}
			else if (TIS_CMDTYPE_MMC_ALERT_DEV_TIS==AppPacket.Header.wCmdType)
			{//发送设备信息
				AppPacket.GetContent(ba);
				dwbaCount=ba.GetCount();
				if (dwbaCount>0)
				{
					dwNow=0;
					bNow=ba.GetData();
					while(dwNow<dwbaCount)
					{
						memcpy(&ddl,bNow,sizeof(ddl));
						if ((ddl.bValid)&&(ddl.dwNodeId>0))
						{
							CView_SvrLog::Info_Add(ddl);
						}
						dwNow+=sizeof(ddl);
						bNow+=sizeof(ddl);
					}
				}
			}
			if (dwLogType!=-1)
			{
				if (pNowDoc->m_set.bShowSetting[dwLogType])
				{
					if (bIsLogSys)
					{
						CView_SvrLog::Log_Add(li);
					}
					else
					{
						if ((dwLogType==LOG_TYPE_DEV_NORMAL)||(dwLogType==LOG_TYPE_DEV_ERROR))
						{
							CView_SvrLog::Log_Add(dli);
						}
						else
						{
							CView_SvrLog::Log_Add(cli);
						}
					}
					if ((pNowDoc->m_set.bAlertSetting[dwLogType])&LOG_ALERT_TYPE_BEEP_MODE_1)
					{
						pNowDoc->m_dwNeedBeep=GetTickCount();
					}
				}
			}
		}
	}
	if (E_KEYOPT_MMC_OBJECT_FULL==Ret)
	{//超过License限制了
		pNowDoc->m_set.bRun=FALSE;
	}

	CView_RunLog::Log_Add("Disconnecting... %X",Ret);
	if (INVALID_SOCKET!=s) 
	{
		Ret=g_key.Socket_Close(s,0);
		s=INVALID_SOCKET;
	}
	CView_RunLog::Log_Add("Disconnected... %X",Ret);
	goto _Thread_Connect_Server_Start;
}

void CLogAlertDoc::OnRunStart()
{
	// TODO: 在此添加命令处理程序代码
	m_set.bRun=TRUE;
}

void CLogAlertDoc::OnRunStop()
{
	// TODO: 在此添加命令处理程序代码
	m_set.bRun=FALSE;
}

void CLogAlertDoc::OnRunParam()
{
	// TODO: 在此添加命令处理程序代码
	CDlg_Run_Setting drs;
	drs.m_lset.Init(m_set);
	if (IDOK==drs.DoModal())
	{
		m_set.Init(drs.m_lset);
		CRegistry::RegSetBinaryKeyValue(HKEY_LOCAL_MACHINE,"Software\\WonderSoft\\LogAlert","Setting",(char*)&m_set,sizeof(m_set));
	}
}

UINT CLogAlertDoc::Thread_Beep(LPVOID pParam)
{
	DWORD dwBeepTick=0;
	CLogAlertDoc* pNowDoc=(CLogAlertDoc*)pParam;
	while (TRUE) 
	{
		if (dwBeepTick!=pNowDoc->m_dwNeedBeep)
		{
			dwBeepTick=pNowDoc->m_dwNeedBeep;
			Beep(5000,300);
			Beep(3000,300);
			Beep(5000,300);
		}
		else
		{
			Sleep(100);
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -