RemoteLog.cpp 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384
  1. // RemoteLog.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "newclient.h"
  5. #include "RemoteLog.h"
  6. #ifdef _DEBUG
  7. #define new DEBUG_NEW
  8. #undef THIS_FILE
  9. static char THIS_FILE[] = __FILE__;
  10. #endif
  11. extern SERVER_INFO serverinfo[MAXIPNUMBER];
  12. CRemoteLog * RFile;
  13. HANDLE hfile[10];
  14. HANDLE hEvent;
  15. /////////////////////////////////////////////////////////////////////////////
  16. // CRemoteLog dialog
  17. UINT LogFileThread(LPVOID pParam)
  18. {
  19. NET_DVR_TIME StartTime;
  20. NET_DVR_TIME StopTime;
  21. LONG m_lLogFile;
  22. LONG bRet = -1;
  23. NET_DVR_LOG strFileInfo;
  24. CString tempstring;
  25. RFile->m_iServer = RFile->m_ServerCtrl.GetCurSel()-1;
  26. RFile->m_iMode = RFile->m_ModeCtrl.GetCurSel();
  27. RFile->m_iMajType = RFile->m_MajTypeCtrl.GetCurSel();
  28. RFile->m_iMinType = RFile->m_MinTypeCtrl.GetCurSel();
  29. StartTime.dwYear = (WORD)RFile->m_ctDateStart.GetYear();
  30. StartTime.dwMonth = (WORD)RFile->m_ctDateStart.GetMonth();
  31. StartTime.dwDay = (WORD)RFile->m_ctDateStart.GetDay();
  32. StartTime.dwHour = (char)RFile->m_ctTimeStart.GetHour();
  33. StartTime.dwMinute = (char)RFile->m_ctTimeStart.GetMinute();
  34. StartTime.dwSecond = (char)RFile->m_ctTimeStart.GetSecond();
  35. StopTime.dwYear = (WORD)RFile->m_ctDateStop.GetYear();
  36. StopTime.dwMonth = (WORD)RFile->m_ctDateStop.GetMonth();
  37. StopTime.dwDay = (WORD)RFile->m_ctDateStop.GetDay();
  38. StopTime.dwHour = (char)RFile->m_ctTimeStop.GetHour();
  39. StopTime.dwMinute = (char)RFile->m_ctTimeStop.GetMinute();
  40. StopTime.dwSecond = (char)RFile->m_ctTimeStop.GetSecond();
  41. m_lLogFile = NET_DVR_FindDVRLog(serverinfo[RFile->m_iServer].m_lServerID, RFile->m_iMode, RFile->m_iMajType, RFile->m_iMinType, &StartTime, &StopTime);
  42. if(m_lLogFile < 0)
  43. {
  44. AfxMessageBox("搜索日志结束失败!");
  45. CString sTemp;
  46. sTemp.Format("ERROR: NET_DVR_FindDVRLog = %d",NET_DVR_GetLastError());
  47. TRACE(sTemp);
  48. CloseHandle(hfile[RFile->n]);
  49. hfile[RFile->n] = NULL;
  50. return 0;
  51. }
  52. while(1)
  53. {
  54. bRet = NET_DVR_FindNextLog(m_lLogFile, &strFileInfo);
  55. if(bRet == NET_DVR_FILE_SUCCESS)
  56. {
  57. 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);
  58. RFile->m_list.InsertItem(RFile->m_lLogNum,tempstring,0);
  59. if(strFileInfo.dwMajorType == 1)
  60. {
  61. tempstring.Format("%s","报警");
  62. }
  63. else if(strFileInfo.dwMajorType == 2)
  64. {
  65. tempstring.Format("%s","异常");
  66. }
  67. else if(strFileInfo.dwMajorType == 3)
  68. {
  69. tempstring.Format("%s","操作");
  70. }
  71. RFile->m_list.SetItemText(RFile->m_lLogNum,1,tempstring);
  72. tempstring.Format("%d",strFileInfo.dwMinorType);
  73. RFile->m_list.SetItemText(RFile->m_lLogNum,2,tempstring);
  74. RFile->m_lLogNum++;
  75. }
  76. else
  77. {
  78. if(bRet == NET_DVR_ISFINDING)
  79. {
  80. Sleep(5);
  81. continue;
  82. }
  83. if( (bRet == NET_DVR_NOMOREFILE) || (bRet == NET_DVR_FILE_NOFIND) )
  84. {
  85. RFile->GetDlgItem(IDC_BUTTONFIND)->SetWindowText("搜索日志"); // by zxy 2005/05/10
  86. RFile->m_bSearch = FALSE;
  87. AfxMessageBox("搜索日志结束!");
  88. break;
  89. }
  90. else
  91. {
  92. RFile->GetDlgItem(IDC_BUTTONFIND)->SetWindowText("搜索日志");
  93. RFile->m_bSearch = FALSE;
  94. AfxMessageBox("由于服务器忙,或网络故障,搜索日志异常终止!");
  95. break;
  96. }
  97. }
  98. }
  99. CloseHandle(hfile[RFile->n]);
  100. hfile[RFile->n] = NULL;
  101. NET_DVR_FindLogClose(m_lLogFile);
  102. return 0;
  103. }
  104. UINT GetLogFileThread(LPVOID pParam)
  105. {
  106. LONG bRet = -1;
  107. NET_DVR_LOG strFileInfo;
  108. CString tempstring;
  109. while(1)
  110. {
  111. bRet = NET_DVR_FindNextLog(RFile->m_lLogFile, &strFileInfo);
  112. if(bRet == NET_DVR_FILE_SUCCESS)
  113. {
  114. 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);
  115. RFile->m_list.InsertItem(RFile->m_lLogNum,tempstring,0);
  116. if(strFileInfo.dwMajorType == 1)
  117. {
  118. tempstring.Format("%s","报警");
  119. }
  120. else if(strFileInfo.dwMajorType == 2)
  121. {
  122. tempstring.Format("%s","异常");
  123. }
  124. else if(strFileInfo.dwMajorType == 3)
  125. {
  126. tempstring.Format("%s","操作");
  127. }
  128. RFile->m_list.SetItemText(RFile->m_lLogNum,1,tempstring);
  129. tempstring.Format("%d",strFileInfo.dwMinorType);
  130. RFile->m_list.SetItemText(RFile->m_lLogNum,2,tempstring);
  131. RFile->m_lLogNum++;
  132. }
  133. else
  134. {
  135. if(bRet == NET_DVR_ISFINDING)
  136. {
  137. Sleep(5);
  138. continue;
  139. }
  140. if( (bRet == NET_DVR_NOMOREFILE) || (bRet == NET_DVR_FILE_NOFIND) )
  141. {
  142. RFile->GetDlgItem(IDC_BUTTONFIND)->SetWindowText("搜索日志"); // by zxy 2005/05/10
  143. RFile->m_bSearch = FALSE;
  144. AfxMessageBox("搜索日志结束!");
  145. break;
  146. }
  147. else
  148. {
  149. RFile->GetDlgItem(IDC_BUTTONFIND)->SetWindowText("搜索日志");
  150. RFile->m_bSearch = FALSE;
  151. AfxMessageBox("由于服务器忙,或网络故障,搜索日志异常终止!");
  152. break;
  153. }
  154. }
  155. }
  156. CloseHandle(RFile->m_hFileThread);
  157. RFile->m_hFileThread = NULL;
  158. NET_DVR_FindLogClose(RFile->m_lLogFile);
  159. return 0;
  160. }
  161. CRemoteLog::CRemoteLog(CWnd* pParent /*=NULL*/)
  162. : CDialog(CRemoteLog::IDD, pParent)
  163. {
  164. //{{AFX_DATA_INIT(CRemoteLog)
  165. m_ctDateStart = 0;
  166. m_ctDateStop = 0;
  167. m_ctTimeStart = 0;
  168. m_ctTimeStop = 0;
  169. //}}AFX_DATA_INIT
  170. }
  171. void CRemoteLog::DoDataExchange(CDataExchange* pDX)
  172. {
  173. CDialog::DoDataExchange(pDX);
  174. //{{AFX_DATA_MAP(CRemoteLog)
  175. DDX_Control(pDX, IDC_LIST, m_list);
  176. DDX_Control(pDX, IDC_COMBOSERVER, m_ServerCtrl);
  177. DDX_Control(pDX, IDC_COMBOMODE, m_ModeCtrl);
  178. DDX_Control(pDX, IDC_COMBOMINTYPE, m_MinTypeCtrl);
  179. DDX_Control(pDX, IDC_COMBOMAJTYPE, m_MajTypeCtrl);
  180. DDX_DateTimeCtrl(pDX, IDC_DATESTART, m_ctDateStart);
  181. DDX_DateTimeCtrl(pDX, IDC_DATESTOP, m_ctDateStop);
  182. DDX_DateTimeCtrl(pDX, IDC_TIMESTART, m_ctTimeStart);
  183. DDX_DateTimeCtrl(pDX, IDC_TIMESTOP, m_ctTimeStop);
  184. //}}AFX_DATA_MAP
  185. }
  186. BEGIN_MESSAGE_MAP(CRemoteLog, CDialog)
  187. //{{AFX_MSG_MAP(CRemoteLog)
  188. ON_BN_CLICKED(IDEXIT, OnExit)
  189. ON_BN_CLICKED(IDC_BUTTONFIND, OnButtonfind)
  190. //}}AFX_MSG_MAP
  191. END_MESSAGE_MAP()
  192. /////////////////////////////////////////////////////////////////////////////
  193. // CRemoteLog message handlers
  194. BOOL CRemoteLog::OnInitDialog()
  195. {
  196. CDialog::OnInitDialog();
  197. // TODO: Add extra initialization here
  198. m_bSearch = FALSE;
  199. m_hFileThread = NULL;
  200. m_ServerCtrl.AddString("请选择DVR");
  201. for(int i = 0; i < MAXIPNUMBER; i++)
  202. {
  203. if(serverinfo[i].m_csServerName != "")
  204. m_ServerCtrl.AddString(serverinfo[i].m_csServerName);
  205. }
  206. RFile = this;
  207. m_list.InsertColumn(0,"日志时间",LVCFMT_LEFT,180,-1);
  208. m_list.InsertColumn(1,"主类型",LVCFMT_LEFT,80,-1);
  209. m_list.InsertColumn(2,"次类型",LVCFMT_LEFT,150,-1);
  210. m_list.InsertColumn(3,"事件",LVCFMT_LEFT,150,-1);
  211. m_lLogNum = 0;
  212. m_lLogFile = -1;
  213. CTime time1 = CTime::GetCurrentTime();
  214. CTime time(time1.GetYear(),time1.GetMonth(),time1.GetDay(),0,0,0);
  215. CTime time0(time1.GetYear(),time1.GetMonth(),time1.GetDay(),23,59,59);
  216. m_ctDateStart = time;
  217. m_ctTimeStart = time;
  218. m_ctDateStop = time1;
  219. m_ctTimeStop = time0;
  220. m_iServer = 0;
  221. m_iMode = 0;
  222. m_iMajType = 0;
  223. m_iMinType = 0;
  224. m_ServerCtrl.SetCurSel(m_iServer);
  225. m_ModeCtrl.SetCurSel(m_iMode);
  226. m_MajTypeCtrl.SetCurSel(m_iMajType);
  227. m_MinTypeCtrl.SetCurSel(m_iMinType);
  228. UpdateData(FALSE);
  229. return TRUE; // return TRUE unless you set the focus to a control
  230. // EXCEPTION: OCX Property Pages should return FALSE
  231. }
  232. void CRemoteLog::OnCancel()
  233. {
  234. // TODO: Add extra cleanup here
  235. // CDialog::OnCancel();
  236. }
  237. void CRemoteLog::OnOK()
  238. {
  239. // TODO: Add extra validation here
  240. // CDialog::OnOK();
  241. }
  242. void CRemoteLog::OnExit()
  243. {
  244. // TODO: Add your control notification handler code here
  245. if(m_hFileThread)
  246. {
  247. TerminateThread(m_hFileThread, 0);
  248. CloseHandle(m_hFileThread);
  249. m_hFileThread = NULL;
  250. NET_DVR_FindLogClose(m_lLogFile);
  251. }
  252. CDialog::OnCancel();
  253. }
  254. void CRemoteLog::OnButtonfind()
  255. {
  256. // TODO: Add your control notification handler code here
  257. UpdateData(TRUE);
  258. DWORD dwThreadId;
  259. if(m_ServerCtrl.GetCurSel() == 0)
  260. {
  261. AfxMessageBox("请选择DVR!");
  262. return;
  263. }
  264. /* if(!m_bSearch)
  265. {
  266. for (i=0; i<10; i++)
  267. {
  268. n = i;
  269. hfile[i] = CreateThread(NULL,0,LPTHREAD_START_ROUTINE(LogFileThread),this,0,&dwThreadId);
  270. if(hfile[i] == NULL)
  271. {
  272. AfxMessageBox("打开线程失败 %d !", i);
  273. return;
  274. }
  275. }
  276. GetDlgItem(IDC_BUTTONFIND)->SetWindowText("停止搜索");
  277. m_bSearch = TRUE;
  278. }
  279. else
  280. {
  281. SetEvent(hEvent);
  282. Sleep(1000);
  283. for (i=0; i<10; i++)
  284. {
  285. if(hfile[i])
  286. {
  287. TerminateThread(hfile[i], 0);
  288. CloseHandle(hfile[i]);
  289. hfile[i] = NULL;
  290. }
  291. }
  292. GetDlgItem(IDC_BUTTONFIND)->SetWindowText("搜索日志");
  293. m_bSearch = FALSE;
  294. }
  295. */
  296. if(!m_bSearch)
  297. {
  298. NET_DVR_TIME StartTime;
  299. NET_DVR_TIME StopTime;
  300. m_iServer = m_ServerCtrl.GetCurSel()-1;
  301. m_iMode = m_ModeCtrl.GetCurSel();
  302. m_iMajType = m_MajTypeCtrl.GetCurSel();
  303. m_iMinType = m_MinTypeCtrl.GetCurSel();
  304. StartTime.dwYear = (WORD)m_ctDateStart.GetYear();
  305. StartTime.dwMonth = (WORD)m_ctDateStart.GetMonth();
  306. StartTime.dwDay = (WORD)m_ctDateStart.GetDay();
  307. StartTime.dwHour = (char)m_ctTimeStart.GetHour();
  308. StartTime.dwMinute = (char)m_ctTimeStart.GetMinute();
  309. StartTime.dwSecond = (char)m_ctTimeStart.GetSecond();
  310. StopTime.dwYear = (WORD)m_ctDateStop.GetYear();
  311. StopTime.dwMonth = (WORD)m_ctDateStop.GetMonth();
  312. StopTime.dwDay = (WORD)m_ctDateStop.GetDay();
  313. StopTime.dwHour = (char)m_ctTimeStop.GetHour();
  314. StopTime.dwMinute = (char)m_ctTimeStop.GetMinute();
  315. StopTime.dwSecond = (char)m_ctTimeStop.GetSecond();
  316. m_lLogFile = NET_DVR_FindDVRLog(serverinfo[m_iServer].m_lServerID, m_iMode, m_iMajType, m_iMinType, &StartTime, &StopTime);
  317. if(m_lLogFile < 0)
  318. {
  319. AfxMessageBox("搜索日志失败!");
  320. CString sTemp;
  321. sTemp.Format("ERROR: NET_DVR_FindDVRLog = %d",NET_DVR_GetLastError());
  322. TRACE(sTemp);
  323. return;
  324. }
  325. m_bSearch = TRUE;
  326. m_lLogNum = 0;
  327. m_list.DeleteAllItems();
  328. if(m_hFileThread == NULL)
  329. m_hFileThread = CreateThread(NULL,0,LPTHREAD_START_ROUTINE(GetLogFileThread),this,0,&dwThreadId);
  330. if(m_hFileThread == NULL)
  331. {
  332. AfxMessageBox("打开线程失败!");
  333. return;
  334. }
  335. GetDlgItem(IDC_BUTTONFIND)->SetWindowText("停止搜索");
  336. m_bSearch = TRUE;
  337. }
  338. else
  339. {
  340. if(m_hFileThread)
  341. {
  342. TerminateThread(m_hFileThread, 0);
  343. CloseHandle(m_hFileThread);
  344. m_hFileThread = NULL;
  345. }
  346. NET_DVR_FindLogClose(m_lLogFile);
  347. GetDlgItem(IDC_BUTTONFIND)->SetWindowText("搜索日志");
  348. m_bSearch = FALSE;
  349. m_lLogNum = 0;
  350. m_hFileThread = NULL;
  351. }
  352. }