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

📄 splitinfodlg.cpp

📁 它是一个可以实时交互的嵌入式软件系统
💻 CPP
字号:
// SplitInfoDlg.cpp : implementation file
//

#include "stdafx.h"
#include "NetSDKDemo.h"
#include "SplitInfoDlg.h"
#include "netsdkdemodlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CSplitInfoDlg dialog
#define MAX_BPS_TYPE 7


CSplitInfoDlg::CSplitInfoDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CSplitInfoDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CSplitInfoDlg)
	//}}AFX_DATA_INIT
}


void CSplitInfoDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CSplitInfoDlg)
	DDX_Control(pDX, IDC_KBPS_SEL, m_kbpssel);
	DDX_Control(pDX, IDC_BPS_DEVSEL, m_devicesel);
	//}}AFX_DATA_MAP

//	OnRefreshInfo();
	// TODO: Add your specialized code here and/or call the base class
}


BEGIN_MESSAGE_MAP(CSplitInfoDlg, CDialog)
	//{{AFX_MSG_MAP(CSplitInfoDlg)
	ON_WM_TIMER()
	ON_BN_CLICKED(IDC_SET_DEVICEBPS, OnSetDevicebps)
	ON_CBN_SELCHANGE(IDC_BPS_DEVSEL, OnSelchangeBpsDevsel)
	ON_WM_CLOSE()
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()


int UpdateDeviceKbpsCallback(const DeviceNode& node, DWORD dwUser)
{
	CSplitInfoDlg* pThis = (CSplitInfoDlg*)dwUser;
	if (!pThis)
	{
		return 1;
	}

	return pThis->UpdateDeviceKbpsCallback_Imp(node);
}


int CSplitInfoDlg::UpdateDeviceKbpsCallback_Imp(const DeviceNode& node)
{
	DeviceNode& _node = *const_cast<DeviceNode*>(&node);
	_node.TotalKbps = CLIENT_GetStatiscFlux(_node.LoginID, 0);
	if (_node.TotalKbps < 0)
	{
		_node.TotalKbps = 0;
		((CNetSDKDemoDlg *)GetParent())->LastError();//Zhengdh 06.11.24
	}

	return 0;
}

/////////////////////////////////////////////////////////////////////////////
// CSplitInfoDlg message handlers
//刷新设备总码流
void CSplitInfoDlg::UpdateDeviceKbps()
{
	CDevMgr::GetDevMgr().For_EachDev(UpdateDeviceKbpsCallback, (DWORD)this);

	/*
	DeviceNode * pInfo;
	
	POSITION nPos = g_ptrdevicelist->GetHeadPosition();
	for(int i = 0; i < g_ptrdevicelist->GetCount(); i ++ )
	{
		pInfo = (DeviceNode *)g_ptrdevicelist->GetNext(nPos);
		if(pInfo)
		{
			pInfo->TotalKbps = CLIENT_GetStatiscFlux(pInfo->LoginID, 0);
			if (pInfo->TotalKbps < 0)
			{
				pInfo->TotalKbps = 0;
				((CNetSDKDemoDlg *)GetParent())->LastError();//Zhengdh 06.11.24
			}
		}
	}
	*/
}

//刷新显示当前各画面的信息
//直接调用sdk码流统计接口 2006-8-11
void CSplitInfoDlg::OnRefreshInfo() 
{
//	CCSLock lck(g_cs);
	CString str, substr;
	DeviceNode *pDev;
	int nChl;
	DWORD nKbps;

	UpdateDeviceKbps();
	int realrate = 0;

	SplitInfoNode siNode;
	memset(&siNode, 0, sizeof(siNode));
	
	CNetSDKDemoDlg *pMain = (CNetSDKDemoDlg *)AfxGetMainWnd();
	for(int i = 0; i < MAX_CHANNUM; i++)
	{
		BOOL ret = pMain->GetSplitInfo_Main(i, &siNode);
		if (!ret)
		{
			MessageBox("error while getting split info");
		}
		if(siNode.Type == SPLIT_TYPE_NULL)
		{
			str.Format("%s",MSG_SPLITINFO_BLANK);
			GetDlgItem(IDC_SPLIT_INFO1 + i)->SetWindowText(str);
			continue;
		}
		else if(siNode.Type == SPLIT_TYPE_MONITOR)
		{
			SplitMonitorParam *mParam = (SplitMonitorParam *)siNode.Param;
			pDev = mParam->pDevice;
			nChl = mParam->iChannel + 1;
			str.Format("%s          %02d          %s",pDev->Name, nChl,
				MSG_SPLITINFO_MONITOR);
		}
		else if(siNode.Type == SPLIT_TYPE_NETPLAY)
		{
			SplitNetPlayParam *nParam = (SplitNetPlayParam *)siNode.Param; 
			pDev = nParam->pFileInfo->pDevice;
			nChl = nParam->pFileInfo->fileinfo.ch + 1;
			str.Format("%s          %02d          %s",pDev->Name, nChl,
				MSG_SPLITINFO_PLAYBACK);
		}
		else if(siNode.Type == SPLIT_TYPE_PBBYTIME)
		{
			SplitPBByTimeParam *pbParam = (SplitPBByTimeParam *)siNode.Param; 
			pDev = pbParam->pDevice;
			nChl = pbParam->nChannel + 1;
			str.Format("%s          %02d          %s",pDev->Name, nChl,
				MSG_SPLITINFO_PLAYBACK);
		}
		else if(siNode.Type == SPLIT_TYPE_MULTIPLAY)
		{
			pDev = (DeviceNode *)siNode.Param;
			str.Format("%s                      %s",pDev->Name, MSG_SPLITINFO_PREVIEW );
		}
		else if(siNode.Type == SPLIT_TYPE_CYCLEMONITOR)
		{
		//	EnterCriticalSection(&g_csCycle);
			SplitCycleParam *cmParam = (SplitCycleParam *)siNode.Param;
			pDev = cmParam->pDevice;
			POSITION nPos;
			nPos = ((SplitCycleParam *)siNode.Param)->pChannelList->GetHeadPosition();
			CycleChannelInfo *tempnode;
			for (int j = 0; j <= cmParam->iCurPosition; j++)
			{
				tempnode = (CycleChannelInfo *)((SplitCycleParam *)siNode.Param)->pChannelList->GetNext(nPos);
			}
			nChl = tempnode->iChannel + 1;
			str.Format("%s          %02d          %s",pDev->Name, nChl,
				MSG_SPLITINFO_CYCLEMONITOR);
		//	LeaveCriticalSection(&g_csCycle);
		}
		if(siNode.Type != SPLIT_TYPE_NULL)
		{
			nKbps = CLIENT_GetStatiscFlux(pDev->LoginID, siNode.iHandle);
			if (nKbps < 0) 
			{
				nKbps = 0;
				((CNetSDKDemoDlg *)GetParent())->LastError();//Zhengdh 06.11.24
			}
			realrate += nKbps*8 / 1024;
			substr.Format("   %d     %d ",nKbps * 8 /1024, pDev->TotalKbps * 8 /1024);
			str += substr;
		}
		GetDlgItem(IDC_SPLIT_INFO1 + i)->SetWindowText(str);
	}	
	char temp[10];
	ZeroMemory(temp, 10);
	GetDlgItem(IDC_REAlRATE)->SetWindowText(ltoa(realrate, temp, 10));
}

int InitComboxSICallback(const DeviceNode& node, DWORD dwUser)
{
	CSplitInfoDlg* pThis = (CSplitInfoDlg*)dwUser;
	if(!pThis)
	{
		return 1;
	}

	return pThis->InitComboxCallback_Imp(node);
}

int CSplitInfoDlg::InitComboxCallback_Imp(const DeviceNode& node)
{
	//设备显示
	CString strDev;	

	strDev.Format(" %s ",node.Name);
	int nIndex = m_devicesel.GetCount();
	m_devicesel.InsertString(nIndex,strDev);
	m_devicesel.SetItemData(nIndex, (DWORD)(&node)); //设置保存当前设备指针值

	return 0;
}

BOOL CSplitInfoDlg::OnInitDialog() 
{
	g_SetWndStaticText(this);

	int i;
	//DeviceNode *nDev;
	CString strDev, strBps;

	CDialog::OnInitDialog();
	int TabKbps[MAX_BPS_TYPE] = {65535, 64 ,128, 256, 512, 768, 1024};

	OnRefreshInfo();
	
	CDevMgr::GetDevMgr().For_EachDev(InitComboxSICallback, (DWORD)this);

	/*
	//初始化可选择的设备
	POSITION nPos = g_ptrdevicelist->GetHeadPosition();
	m_devicesel.Clear();
	for(i = 0; i < g_ptrdevicelist->GetCount(); i ++ )
	{
		//设备显示格式
		nDev = (DeviceNode *)g_ptrdevicelist->GetNext(nPos);
		
		//设备显示
		strDev.Format(" %s ",nDev->Name);
		m_devicesel.InsertString(i,strDev);
		m_devicesel.SetItemData(i, (DWORD)nDev); //设置保存当前设备指针值
	}
	*/

	for(i = 0; i < MAX_BPS_TYPE; i ++)
	{
		strBps.Format(" %d kbps", TabKbps[i]);
		if(TabKbps[i] == 65535)
		{
			strBps.Format(MSG_SPLITINFO_NOLIMIT);
		}
		m_kbpssel.InsertString(i, strBps);
		m_kbpssel.SetItemData(i, TabKbps[i]);
	}
	SetTimer((UINT)this, 1000,NULL);
	
	return TRUE; 
}

void CSplitInfoDlg::OnTimer(UINT nIDEvent) 
{
	OnRefreshInfo();
	CDialog::OnTimer(nIDEvent);
}

void CSplitInfoDlg::OnSetDevicebps() 
{
	if(m_devicesel.GetCount() <= 0 || m_devicesel.GetCurSel() < 0)
	{
		MessageBox(MSG_SPLITINFO_NODEVICE,MSG_SPLITINFO_CHOOSEDEVICE);
		return;
	}
	
	DeviceNode *nDev = (DeviceNode *)m_devicesel.GetItemData(m_devicesel.GetCurSel());
	int nKbps = m_kbpssel.GetItemData(m_kbpssel.GetCurSel());
	nDev->Max_Kbps = m_kbpssel.GetCurSel();
	BOOL nRet = CLIENT_SetMaxFlux(nDev->LoginID,nKbps);
	if(!nRet)
	{
		((CNetSDKDemoDlg *)GetParent())->LastError();//Zhengdh 06.11.24
		MessageBox(MSG_SPLITINFO_LIMIT_FAILED);
	}
}

//设备选择与码流对应
void CSplitInfoDlg::OnSelchangeBpsDevsel() 
{
	if(m_devicesel.GetCount() <= 0 || m_devicesel.GetCurSel() < 0)
	{
		return;
	}
	
	DeviceNode *nDev = (DeviceNode *)m_devicesel.GetItemData(m_devicesel.GetCurSel());
	
	m_kbpssel.SetCurSel(nDev->Max_Kbps);
}

void CSplitInfoDlg::OnClose() 
{
	KillTimer((int)this);
	CDialog::OnClose();
}

⌨️ 快捷键说明

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