// RemoteLog.cpp : implementation file // #include "stdafx.h" #include "StoneU_HC_OCX.h" #include "RemoteLog.h" #include "newclientDlg.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif extern SERVER_INFO serverinfo[MAXIPNUMBER]; CRemoteLog * RFile; HANDLE hfile[10]; HANDLE hEvent; extern CNewclientDlg *g_NewClientDlg; ///////////////////////////////////////////////////////////////////////////// // CRemoteLog dialog UINT LogFileThread(LPVOID pParam) { NET_DVR_TIME StartTime; NET_DVR_TIME StopTime; LONG m_lLogFile; LONG bRet = -1; NET_DVR_LOG strFileInfo; CString tempstring; RFile->m_iServer = RFile->m_ServerCtrl.GetCurSel()-1; RFile->m_iMode = RFile->m_ModeCtrl.GetCurSel(); RFile->m_iMajType = RFile->m_MajTypeCtrl.GetCurSel(); RFile->m_iMinType = RFile->m_MinTypeCtrl.GetCurSel(); StartTime.dwYear = (WORD)RFile->m_ctDateStart.GetYear(); StartTime.dwMonth = (WORD)RFile->m_ctDateStart.GetMonth(); StartTime.dwDay = (WORD)RFile->m_ctDateStart.GetDay(); StartTime.dwHour = (char)RFile->m_ctTimeStart.GetHour(); StartTime.dwMinute = (char)RFile->m_ctTimeStart.GetMinute(); StartTime.dwSecond = (char)RFile->m_ctTimeStart.GetSecond(); StopTime.dwYear = (WORD)RFile->m_ctDateStop.GetYear(); StopTime.dwMonth = (WORD)RFile->m_ctDateStop.GetMonth(); StopTime.dwDay = (WORD)RFile->m_ctDateStop.GetDay(); StopTime.dwHour = (char)RFile->m_ctTimeStop.GetHour(); StopTime.dwMinute = (char)RFile->m_ctTimeStop.GetMinute(); StopTime.dwSecond = (char)RFile->m_ctTimeStop.GetSecond(); m_lLogFile = NET_DVR_FindDVRLog(serverinfo[RFile->m_iServer].m_lServerID, RFile->m_iMode, RFile->m_iMajType, RFile->m_iMinType, &StartTime, &StopTime); if(m_lLogFile < 0) { MessageBox(g_NewClientDlg->GetSafeHwnd(),"搜索日志结束失败!", "温馨提示", MB_ICONINFORMATION); CString sTemp; sTemp.Format("ERROR: NET_DVR_FindDVRLog = %d",NET_DVR_GetLastError()); TRACE(sTemp); CloseHandle(hfile[RFile->n]); hfile[RFile->n] = NULL; return 0; } while(1) { bRet = NET_DVR_FindNextLog(m_lLogFile, &strFileInfo); if(bRet == NET_DVR_FILE_SUCCESS) { tempstring.Format("%04d-%02d-%02d %02d:%02d:%02d", strFileInfo.strLogTime.dwYear, strFileInfo.strLogTime.dwMonth, strFileInfo.strLogTime.dwDay, strFileInfo.strLogTime.dwHour,strFileInfo.strLogTime.dwMinute,strFileInfo.strLogTime.dwSecond); RFile->m_list.InsertItem(RFile->m_lLogNum,tempstring,0); if(strFileInfo.dwMajorType == 1) { tempstring.Format("%s","报警"); } else if(strFileInfo.dwMajorType == 2) { tempstring.Format("%s","异常"); } else if(strFileInfo.dwMajorType == 3) { tempstring.Format("%s","操作"); } RFile->m_list.SetItemText(RFile->m_lLogNum,1,tempstring); tempstring.Format("%d",strFileInfo.dwMinorType); RFile->m_list.SetItemText(RFile->m_lLogNum,2,tempstring); RFile->m_lLogNum++; } else { if(bRet == NET_DVR_ISFINDING) { Sleep(5); continue; } if( (bRet == NET_DVR_NOMOREFILE) || (bRet == NET_DVR_FILE_NOFIND) ) { RFile->GetDlgItem(IDC_BUTTONFIND)->SetWindowText("搜索日志"); // by zxy 2005/05/10 RFile->m_bSearch = FALSE; MessageBox(g_NewClientDlg->GetSafeHwnd(),"搜索日志结束!", "温馨提示", MB_ICONINFORMATION); break; } else { RFile->GetDlgItem(IDC_BUTTONFIND)->SetWindowText("搜索日志"); RFile->m_bSearch = FALSE; MessageBox(g_NewClientDlg->GetSafeHwnd(),"由于服务器忙,或网络故障,搜索日志异常终止!", "温馨提示", MB_ICONINFORMATION); break; } } } CloseHandle(hfile[RFile->n]); hfile[RFile->n] = NULL; NET_DVR_FindLogClose(m_lLogFile); return 0; } UINT GetLogFileThread(LPVOID pParam) { LONG bRet = -1; NET_DVR_LOG strFileInfo; CString tempstring; while(1) { bRet = NET_DVR_FindNextLog(RFile->m_lLogFile, &strFileInfo); if(bRet == NET_DVR_FILE_SUCCESS) { tempstring.Format("%04d-%02d-%02d %02d:%02d:%02d", strFileInfo.strLogTime.dwYear, strFileInfo.strLogTime.dwMonth, strFileInfo.strLogTime.dwDay, strFileInfo.strLogTime.dwHour,strFileInfo.strLogTime.dwMinute,strFileInfo.strLogTime.dwSecond); RFile->m_list.InsertItem(RFile->m_lLogNum,tempstring,0); if(strFileInfo.dwMajorType == 1) { tempstring.Format("%s","报警"); } else if(strFileInfo.dwMajorType == 2) { tempstring.Format("%s","异常"); } else if(strFileInfo.dwMajorType == 3) { tempstring.Format("%s","操作"); } RFile->m_list.SetItemText(RFile->m_lLogNum,1,tempstring); tempstring.Format("%d",strFileInfo.dwMinorType); RFile->m_list.SetItemText(RFile->m_lLogNum,2,tempstring); RFile->m_lLogNum++; } else { if(bRet == NET_DVR_ISFINDING) { Sleep(5); continue; } if( (bRet == NET_DVR_NOMOREFILE) || (bRet == NET_DVR_FILE_NOFIND) ) { RFile->GetDlgItem(IDC_BUTTONFIND)->SetWindowText("搜索日志"); // by zxy 2005/05/10 RFile->m_bSearch = FALSE; MessageBox(g_NewClientDlg->GetSafeHwnd(),"搜索日志结束!", "温馨提示", MB_ICONINFORMATION); break; } else { RFile->GetDlgItem(IDC_BUTTONFIND)->SetWindowText("搜索日志"); RFile->m_bSearch = FALSE; MessageBox(g_NewClientDlg->GetSafeHwnd(),"由于服务器忙,或网络故障,搜索日志异常终止!", "温馨提示", MB_ICONINFORMATION); break; } } } CloseHandle(RFile->m_hFileThread); RFile->m_hFileThread = NULL; NET_DVR_FindLogClose(RFile->m_lLogFile); return 0; } CRemoteLog::CRemoteLog(CWnd* pParent /*=NULL*/) : CDialog(CRemoteLog::IDD, pParent) { //{{AFX_DATA_INIT(CRemoteLog) m_ctDateStart = 0; m_ctDateStop = 0; m_ctTimeStart = 0; m_ctTimeStop = 0; //}}AFX_DATA_INIT } void CRemoteLog::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CRemoteLog) DDX_Control(pDX, IDC_LIST, m_list); DDX_Control(pDX, IDC_COMBOSERVER, m_ServerCtrl); DDX_Control(pDX, IDC_COMBOMODE, m_ModeCtrl); DDX_Control(pDX, IDC_COMBOMINTYPE, m_MinTypeCtrl); DDX_Control(pDX, IDC_COMBOMAJTYPE, m_MajTypeCtrl); DDX_DateTimeCtrl(pDX, IDC_DATESTART, m_ctDateStart); DDX_DateTimeCtrl(pDX, IDC_DATESTOP, m_ctDateStop); DDX_DateTimeCtrl(pDX, IDC_TIMESTART, m_ctTimeStart); DDX_DateTimeCtrl(pDX, IDC_TIMESTOP, m_ctTimeStop); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CRemoteLog, CDialog) //{{AFX_MSG_MAP(CRemoteLog) ON_BN_CLICKED(IDEXIT, OnExit) ON_BN_CLICKED(IDC_BUTTONFIND, OnButtonfind) //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CRemoteLog message handlers BOOL CRemoteLog::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here m_bSearch = FALSE; m_hFileThread = NULL; m_ServerCtrl.AddString("请选择DVR"); for(int i = 0; i < MAXIPNUMBER; i++) { if(serverinfo[i].m_csServerName != "") m_ServerCtrl.AddString(serverinfo[i].m_csServerName); } RFile = this; m_list.InsertColumn(0,"日志时间",LVCFMT_LEFT,180,-1); m_list.InsertColumn(1,"主类型",LVCFMT_LEFT,80,-1); m_list.InsertColumn(2,"次类型",LVCFMT_LEFT,150,-1); m_list.InsertColumn(3,"事件",LVCFMT_LEFT,150,-1); m_lLogNum = 0; m_lLogFile = -1; CTime time1 = CTime::GetCurrentTime(); CTime time(time1.GetYear(),time1.GetMonth(),time1.GetDay(),0,0,0); CTime time0(time1.GetYear(),time1.GetMonth(),time1.GetDay(),23,59,59); m_ctDateStart = time; m_ctTimeStart = time; m_ctDateStop = time1; m_ctTimeStop = time0; m_iServer = 0; m_iMode = 0; m_iMajType = 0; m_iMinType = 0; m_ServerCtrl.SetCurSel(m_iServer); m_ModeCtrl.SetCurSel(m_iMode); m_MajTypeCtrl.SetCurSel(m_iMajType); m_MinTypeCtrl.SetCurSel(m_iMinType); UpdateData(FALSE); return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CRemoteLog::OnCancel() { // TODO: Add extra cleanup here // CDialog::OnCancel(); } void CRemoteLog::OnOK() { // TODO: Add extra validation here // CDialog::OnOK(); } void CRemoteLog::OnExit() { // TODO: Add your control notification handler code here if(m_hFileThread) { TerminateThread(m_hFileThread, 0); CloseHandle(m_hFileThread); m_hFileThread = NULL; NET_DVR_FindLogClose(m_lLogFile); } CDialog::OnCancel(); } void CRemoteLog::OnButtonfind() { // TODO: Add your control notification handler code here UpdateData(TRUE); DWORD dwThreadId; if(m_ServerCtrl.GetCurSel() == 0) { MessageBox("获取设备状态失败!", "温馨提示", MB_ICONINFORMATION); return; } /* if(!m_bSearch) { for (i=0; i<10; i++) { n = i; hfile[i] = CreateThread(NULL,0,LPTHREAD_START_ROUTINE(LogFileThread),this,0,&dwThreadId); if(hfile[i] == NULL) { } } GetDlgItem(IDC_BUTTONFIND)->SetWindowText("停止搜索"); m_bSearch = TRUE; } else { SetEvent(hEvent); Sleep(1000); for (i=0; i<10; i++) { if(hfile[i]) { TerminateThread(hfile[i], 0); CloseHandle(hfile[i]); hfile[i] = NULL; } } GetDlgItem(IDC_BUTTONFIND)->SetWindowText("搜索日志"); m_bSearch = FALSE; } */ if(!m_bSearch) { NET_DVR_TIME StartTime; NET_DVR_TIME StopTime; m_iServer = m_ServerCtrl.GetCurSel()-1; m_iMode = m_ModeCtrl.GetCurSel(); m_iMajType = m_MajTypeCtrl.GetCurSel(); m_iMinType = m_MinTypeCtrl.GetCurSel(); StartTime.dwYear = (WORD)m_ctDateStart.GetYear(); StartTime.dwMonth = (WORD)m_ctDateStart.GetMonth(); StartTime.dwDay = (WORD)m_ctDateStart.GetDay(); StartTime.dwHour = (char)m_ctTimeStart.GetHour(); StartTime.dwMinute = (char)m_ctTimeStart.GetMinute(); StartTime.dwSecond = (char)m_ctTimeStart.GetSecond(); StopTime.dwYear = (WORD)m_ctDateStop.GetYear(); StopTime.dwMonth = (WORD)m_ctDateStop.GetMonth(); StopTime.dwDay = (WORD)m_ctDateStop.GetDay(); StopTime.dwHour = (char)m_ctTimeStop.GetHour(); StopTime.dwMinute = (char)m_ctTimeStop.GetMinute(); StopTime.dwSecond = (char)m_ctTimeStop.GetSecond(); m_lLogFile = NET_DVR_FindDVRLog(serverinfo[m_iServer].m_lServerID, m_iMode, m_iMajType, m_iMinType, &StartTime, &StopTime); if(m_lLogFile < 0) { MessageBox("搜索日志失败!", "温馨提示", MB_ICONINFORMATION); CString sTemp; sTemp.Format("ERROR: NET_DVR_FindDVRLog = %d",NET_DVR_GetLastError()); TRACE(sTemp); return; } m_bSearch = TRUE; m_lLogNum = 0; m_list.DeleteAllItems(); if(m_hFileThread == NULL) m_hFileThread = CreateThread(NULL,0,LPTHREAD_START_ROUTINE(GetLogFileThread),this,0,&dwThreadId); if(m_hFileThread == NULL) { MessageBox("打开线程失败!", "温馨提示", MB_ICONINFORMATION); return; } GetDlgItem(IDC_BUTTONFIND)->SetWindowText("停止搜索"); m_bSearch = TRUE; } else { if(m_hFileThread) { TerminateThread(m_hFileThread, 0); CloseHandle(m_hFileThread); m_hFileThread = NULL; } NET_DVR_FindLogClose(m_lLogFile); GetDlgItem(IDC_BUTTONFIND)->SetWindowText("搜索日志"); m_bSearch = FALSE; m_lLogNum = 0; m_hFileThread = NULL; } }