// PageTraffic.cpp : implementation file // #include "stdafx.h" #include "mgrnve.h" #include "ConnectionManager.h" #include "PageTraffic.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CPageTraffic dialog CPageTraffic::CPageTraffic(CWnd* pParent, CMgrNVE* pMgrCM, CConnectionManager *pConnMgr) : CParamDlg(CPageTraffic::IDD, pParent, pMgrCM, pConnMgr) { //{{AFX_DATA_INIT(CPageTraffic) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT m_pNet5Api = NULL; m_pMsgMgr = NULL; m_uVideoKBps = NULL; m_uAudioKBps = NULL; m_uEventKBps = NULL; m_uTotalKBps = NULL; ZeroMemory(m_BwInfo, sizeof(m_BwInfo)); } void CPageTraffic::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(CPageTraffic) DDX_Control(pDX, IDC_LIST_BW_USAGE_LIST, m_lstBwList); //}}AFX_DATA_MAP } BEGIN_MESSAGE_MAP(CPageTraffic, CDialog) //{{AFX_MSG_MAP(CPageTraffic) ON_WM_DESTROY() //}}AFX_MSG_MAP END_MESSAGE_MAP() ///////////////////////////////////////////////////////////////////////////// // CPageTraffic message handlers BOOL CPageTraffic::OnInitDialog() { CDialog::OnInitDialog(); // TODO: Add extra initialization here m_pNet5Api = m_pConnection->GetNet5Api(); m_pMsgMgr = m_pMsgMgr = m_pMgrNVE->GetMsgManager(); TCHAR rgtsz[][NVE_SHORT_STR_LENGTH] = {_T("Ch"), _T("IP"), _T("Video"), _T("Audio"), _T("Event")}; ULONG uWidth[] = { 30, 110, 50, 50 ,50 }; LV_COLUMN lvcolumn; ULONG uNum = sizeof(rgtsz)/NVE_SHORT_STR_LENGTH; for(ULONG i = 0; i < uNum; i++) { lvcolumn.mask = LVCF_FMT | LVCF_SUBITEM | LVCF_TEXT | LVCF_WIDTH | LVCF_ORDER; lvcolumn.fmt = LVCFMT_LEFT; lvcolumn.pszText = rgtsz[i]; lvcolumn.iSubItem = i; lvcolumn.iOrder = i; lvcolumn.cx = uWidth[i]; m_lstBwList.InsertColumn(i, &lvcolumn); } if (!m_ThreadBW.StartThread(ThreadCheckBWStub, this, NULL, NULL)) { TRACE("Cannot start BW checking thread\n"); return FALSE; } return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CPageTraffic::OnDestroy() { CDialog::OnDestroy(); // TODO: Add your message handler code here m_ThreadBW.StopThread(1); } DWORD WINAPI CPageTraffic::ThreadCheckBWStub(LPVOID lpParameter) { THREAD_PARAM_SET *pParam = (THREAD_PARAM_SET*)lpParameter; return static_cast(pParam->pParam2)->ThreadCheckBW(pParam); } DWORD WINAPI CPageTraffic::ThreadCheckBW(THREAD_PARAM_SET *pParam) { BOOL bRun = TRUE; CUserThread *pThread = (CUserThread*)pParam->pParam1; while (bRun) { ULONG uRs = WaitForSingleObject(pThread->GetKillHandle(), 1000); if (uRs == WAIT_OBJECT_0) { break; } char szCmd[NVE_SHORT_EXT_CMD_LENGTH] = "EXT_CMD / RTSP/1.0\r\n" "CSeq: 1\r\n" "CmdCount: 1\r\n" "GET SYSTEM_INFO traffic_info\r\n\r\n"; m_pNet5Api->Net5Command(NET5_NC_SEND_RTSP_REQUEST, (ULONG*)szCmd, NULL, NULL, NULL); m_pNet5Api->Net5Command(NET5_NC_RECV_RTSP_RESPONSE, (ULONG*)szCmd, NULL, NULL, NULL); char *pszStart = strstr(szCmd, "traffic_info"); if (!pszStart) { break; } pszStart += strlen("traffic_info.s=\""); char *pszList = strtok(pszStart, ","); char szList[MAX_BW_CHECK_COUNT][NVE_MAX_STR_LENGTH]; LV_ITEM lvitem; ULONG uCount = 0; ZeroMemory(szList, sizeof(szList)); //m_lstBwList.DeleteAllItems(); while (1) { if (!pszList) { break; } if (pszList[0] == ' ') { pszList = pszList+1; } if (strstr(pszList, "\"")) { pszList[strlen(pszList)-5] = 0; } //TRACE("%s\n", pszList); strcpy(szList[uCount], pszList); lvitem.iItem = uCount; lvitem.mask = LVIF_TEXT|LVIF_IMAGE|LVIF_INDENT|LVIF_PARAM; lvitem.iSubItem = 0; lvitem.iImage = 0; lvitem.stateMask = LVIS_STATEIMAGEMASK; lvitem.state = INDEXTOSTATEIMAGEMASK(1); uCount++; pszList = strtok(NULL, ","); if (uCount > MAX_BW_CHECK_COUNT) { bRun = FALSE; break; } } m_uVideoKBps = 0; m_uAudioKBps = 0; m_uEventKBps = 0; m_uTotalKBps = 0; int i, j; ZeroMemory(m_BwInfo, sizeof(m_BwInfo)); for (i=0; i