📄 logalertdoc.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 + -