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

📄 dvsusernet.cpp

📁 MPEG4网络视频服务器客户端图象监控软件
💻 CPP
字号:
#include "stdafx.h"
#include "DvsUser.h"
#include "DvsUserDlg.h"

#include "RecvCmdThread.h"

#include "WorkDevice.h"

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

#define	WM_PROGRAMEXIT	WM_USER+2001
#define	WM_QUERYSWITCH	WM_USER+2002
//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------
VOID CDvsUserDlg::CmdListenProc()
{
	if(cmdListenSock.Accept(ctrlSock))
	{
		recvCmdThread = new CRecvCmdThread();
		recvCmdThread->Create(this);
		recvCmdThread->Resume();
	}
}
//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------
VOID CDvsUserDlg::DataListenProc()
{
	CBlockSocket* pSockTemp = new CBlockSocket();
	if(dataListenSock.Accept(*pSockTemp))
	{
		for(int i=0; i<4; i++)
		{
			if(!pWork[i]->m_bStart == TRUE)
			{
				pWork[i]->pDataSock = pSockTemp;
				CreateWorkDevice(i);
				return;
			}
		}
	}

	delete pSockTemp;
}
//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------
INT CDvsUserDlg::CreateWorkDevice(int index)
{
	if(pCurrentView)
	{
		pWork[index]->SetViewWindow(pCurrentView, m_nCurrentView);
	}
	else{
		pWork[index]->SetViewWindow(&m_view1, m_nCurrentView);
	}
	
	pWork[index]->Start();
	return 1;
}
//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------
INT CDvsUserDlg::OnDestroyWorkDevice(WPARAM wParam, LPARAM lParam)
{
	CWorkDevice* pDevice = (CWorkDevice*)wParam;
	if(pDevice)
	{
		for(int i=0; i<4; i++)
		{
			if(pWork[i])
			{
				if(pWork[i] == pDevice)
				{
					pWork[i]->Destroy();
					if(!m_bExit)
					{
						pWork[i]->Init();
					}
				}
			}
		}
	}
	return 1;
}
//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------
VOID CDvsUserDlg::RecvCmdProc()
{
	if(!ctrlSock.RecvProc(&CMD, sizeof(CMD_SIGNAL)))
	{
		if(!m_bExit)
		{
			m_bExit = TRUE;
			PostMessage(WM_PROGRAMEXIT);
		}
		::Sleep(200);
		return;
	}

	if(CMD.dwFlag == 0x7FFFFFFF)
	{
		if(!m_bExit)
		{
			OnDealMessage(&CMD);
		}
	}
}
//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------
VOID CDvsUserDlg::OnDealMessage(CMD_SIGNAL* pCmd)
{
	switch(pCmd->dwMainCmd)
	{
	case	VIDEOSOURCE:
		OnRecvCardInfo(pCmd);
		break;

	case	VIDEOSWITCH:
		OnRecvSwitchInfo(pCmd);
		break;

	case	ALERTSIGNAL:
		OnRecvAlertSignal(pCmd);
		break;

	case	PCMESSAGE:
		OnRecvEventMessage(pCmd);
		break;
		
	case	RECYCLEMESSAGE:
		OnRecvRecycleMessage();
		break;

	}
}
//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------
INT CDvsUserDlg::OnRecvCardInfo(CMD_SIGNAL* pCmd)
{
	static BOOL s_bFirstVideoList	=  TRUE;
	if(ctrlSock.RecvProc(CARD, sizeof(CARDINFO)*32))
	{
		if(s_bFirstVideoList == TRUE)
		{
			AddVideoList();
			s_bFirstVideoList		= FALSE;
		}
	}
	return 0;
}
//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------
INT CDvsUserDlg::OnRecvSwitchInfo(CMD_SIGNAL* pCmd)
{
	if(!ctrlSock.RecvProc(&SWITCH, sizeof(SWITCHINFO)))
		return 0;
	
	PostMessage(WM_QUERYSWITCH);

	return 1;
}
//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------
INT CDvsUserDlg::OnRecvAlertSignal(CMD_SIGNAL* pCmd)		//开始报警处理
{
ALERTINFO	info;
CString		strCard;
CString		strBrance;
DWORD		dwGUID;
INT			iWindow = 0xff;

	if(!ctrlSock.RecvProc(&info, sizeof(ALERTINFO))) return 0;

	strCard = info.szCardIP;
	dwGUID	= ::SetGUID(strCard);
	
/////////////////////////////////////////////////////////////////////////	
CString strSoundFile;
	strSoundFile.Format("%s\\wave\\%d.wav", m_strModulePath, info.dwActiveBrance+1);

	::PlaySound(NULL, NULL, SND_ASYNC);
	::PlaySound(strSoundFile, NULL, SND_FILENAME|SND_ASYNC|SND_LOOP);
//////////////////////////////////////////////////////////////////////////
	/*LOG FILE*/
	m_Log.WriteLog(CLog::ALERT, CLIENT.szUserName, CLIENT.dwUserPriority);
//////////////////////////////////////////////////////////////////////////

	for(int i=0; i<4; i++)
	{
		if(LINK[i].bLinkState == TRUE)
		{
			strCard = CARD[LINK[i].dwCard].szCardIP;
			if(dwGUID == ::SetGUID(strCard))
			{
				switch (i) {
				case 0:
					m_view1_bar.SetAlert();
					LINK[0].dwBrance	= info.dwActiveBrance;
					strBrance = CARD[LINK[i].dwCard].Brance[LINK[i].dwBrance].szBranceName;
					m_view1_bar.SetTitle(strBrance);
					iWindow = 0;
					break;

				case 1:
					m_view2_bar.SetAlert();
					LINK[1].dwBrance	= info.dwActiveBrance;
					strBrance = CARD[LINK[i].dwCard].Brance[LINK[i].dwBrance].szBranceName;
					m_view2_bar.SetTitle(strBrance);
					iWindow = 1;
					break;

				case 2:
					m_view3_bar.SetAlert();
					LINK[2].dwBrance	= info.dwActiveBrance;
					strBrance = CARD[LINK[i].dwCard].Brance[LINK[i].dwBrance].szBranceName;
					m_view3_bar.SetTitle(strBrance);
					iWindow = 2;
					break;

				case 3:
					m_view4_bar.SetAlert();
					LINK[3].dwBrance	= info.dwActiveBrance;
					strBrance = CARD[LINK[i].dwCard].Brance[LINK[i].dwBrance].szBranceName;
					m_view4_bar.SetTitle(strBrance);
					iWindow = 3;
					break;
				}
/////////////////////////////////报警时自动存盘设置///////////////////////////////////////////		
				for(i=0; i<4; i++)
				{
					if(pWork[i]->m_nViewWindow == iWindow)
					{
						if(pWork[i]->m_bStart == TRUE)
						{
							if(pWork[i]->m_bSaveFile != TRUE)		//如果标志和以前相同则不设
							{
								pWork[i]->SetSaveFlag(TRUE);
								break;
							}
						}
					}
				}
/////////////////////////////////报警时自动存盘设置///////////////////////////////////////////
			}
		}
	}
	
	return 1;
}
//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------
INT CDvsUserDlg::OnRecvRecycleMessage()
{
ALERTINFO	info;
CString		strCard;
CString		strBrance;
DWORD		dwGUID;
	
	if(!ctrlSock.RecvProc(&info, sizeof(ALERTINFO))) return 0;

	strCard = info.szCardIP;
	dwGUID	= ::SetGUID(strCard);
	
	for(int i=0; i<4; i++)
	{
		if(LINK[i].bLinkState == TRUE)
		{
			strCard = CARD[LINK[i].dwCard].szCardIP;
			if(dwGUID == ::SetGUID(strCard))
			{
				switch(i){
				case	0:
					LINK[0].dwBrance	= info.dwActiveBrance;
					strBrance			= CARD[LINK[i].dwCard].Brance[LINK[i].dwBrance].szBranceName;
					m_view1_bar.SetTitle(strBrance);
					break;

				case	1:
					LINK[1].dwBrance	= info.dwActiveBrance;
					strBrance			= CARD[LINK[i].dwCard].Brance[LINK[i].dwBrance].szBranceName;
					m_view2_bar.SetTitle(strBrance);
					break;

				case	2:
					LINK[2].dwBrance	= info.dwActiveBrance;
					strBrance			= CARD[LINK[i].dwCard].Brance[LINK[i].dwBrance].szBranceName;
					m_view3_bar.SetTitle(strBrance);
					break;

				case	3:
					LINK[3].dwBrance	= info.dwActiveBrance;
					strBrance			= CARD[LINK[i].dwCard].Brance[LINK[i].dwBrance].szBranceName;
					m_view4_bar.SetTitle(strBrance);
					break;
				}
			}
		}
	}
	return 1;
}
//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------
INT CDvsUserDlg::OnRecvEventMessage(CMD_SIGNAL* pCmd)		//结束报警处理
{
	
	return 1;
}
//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------
INT CDvsUserDlg::OnSendVideoStart(DWORD	dwCardIndex, DWORD dwActiveBrance)
{
  CString strTmp; CMD_SIGNAL myCmd;

	strTmp = CARD[dwCardIndex].szCardIP;
	AV.dwGUID			= SetGUID(strTmp);
	AV.dwActiveBrance	= dwActiveBrance;
	AV.dwUserPriority	= CLIENT.dwUserPriority;

	myCmd.dwFlag		= CLIENT2SERVER;
	myCmd.dwMainCmd		= VIDEOSTART;
	myCmd.dwSubCmd		= 0;
	myCmd.dwLength		= sizeof(AVINFO);

	if(!ctrlSock.SendProc(&myCmd, sizeof(CMD_SIGNAL)))
		return 0;

	if(!ctrlSock.SendProc(&AV, sizeof(AVINFO)))
		return 0;
	
	return 1;
}
//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------
INT CDvsUserDlg::OnSendVideoStop(DWORD	dwCardIndex, DWORD dwActiveBrance)
{
  CString strTmp; CMD_SIGNAL myCmd;

	strTmp = CARD[dwCardIndex].szCardIP;
	AV.dwGUID			= SetGUID(strTmp);
	AV.dwActiveBrance	= dwActiveBrance;
	AV.dwUserPriority	= CLIENT.dwUserPriority;

	myCmd.dwFlag		= CLIENT2SERVER;
	myCmd.dwMainCmd		= VIDEOSTOP;
	myCmd.dwSubCmd		= 0;
	myCmd.dwLength		= sizeof(AVINFO);

	if(!ctrlSock.SendProc(&myCmd, sizeof(CMD_SIGNAL)))
		return 0;

	if(!ctrlSock.SendProc(&AV, sizeof(AVINFO)))
		return 0;
	
	return 1;
}
//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------
INT CDvsUserDlg::OnSendDeviceCtrl(DEVICEINFO* pDevice)
{
  CMD_SIGNAL	myCmd;

	myCmd.dwFlag		= CLIENT2SERVER;
	myCmd.dwMainCmd		= DEVICECTRL;
	myCmd.dwSubCmd		= 0;
	myCmd.dwLength		= sizeof(DEVICEINFO);

	if(!ctrlSock.SendProc(&myCmd, sizeof(CMD_SIGNAL)))
		return 0;

	if(!ctrlSock.SendProc(pDevice, sizeof(DEVICEINFO)))
		return 0;

	return 1;	
}
//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------
INT CDvsUserDlg::OnSendLamp(ALERTINFO* pAlert)
{
CMD_SIGNAL myCmd;

	myCmd.dwFlag		= CLIENT2SERVER;
	myCmd.dwMainCmd		= LAMPCTRL;
	myCmd.dwSubCmd		= 0;
	myCmd.dwLength		= sizeof(ALERTINFO);

	if(!ctrlSock.SendProc(&myCmd, sizeof(CMD_SIGNAL)))
		return 0;

	if(!ctrlSock.SendProc(pAlert, sizeof(ALERTINFO)))
		return 0;

	return 1;	
}
//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------
INT CDvsUserDlg::OnSendSwitchInfo()
{
CMD_SIGNAL myCmd;

	myCmd.dwFlag		= CLIENT2SERVER;
	myCmd.dwMainCmd		= VIDEOSWITCH;
	myCmd.dwSubCmd		= QUERY_SWITCH;
	myCmd.dwLength		= 0;

	if(!ctrlSock.SendProc(&myCmd, sizeof(CMD_SIGNAL)))
		return 0;
	
	return 1;
}
//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------
INT CDvsUserDlg::OnSendPlaceDefeat(BOOL bSetAlert)
{
CMD_SIGNAL myCmd;
	
	myCmd.dwFlag		= CLIENT2SERVER;
	myCmd.dwMainCmd		= PLACEDEFEAT;
	myCmd.dwSubCmd		= bSetAlert;
	myCmd.dwLength		= 0;

	if(!ctrlSock.SendProc(&myCmd, sizeof(CMD_SIGNAL)))
		return 0;
	return 1;
}
//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------
INT CDvsUserDlg::OnSendRecycleView(RECYCLEINFO* pView)
{
CMD_SIGNAL myCmd;

	myCmd.dwFlag		= CLIENT2SERVER;
	myCmd.dwMainCmd		= RECYCLEVIEW;
	myCmd.dwSubCmd		= 0;
	myCmd.dwLength		= sizeof(RECYCLEINFO);

	if(!ctrlSock.SendProc(&myCmd, sizeof(CMD_SIGNAL)))
		return 0;

	if(!ctrlSock.SendProc(pView, sizeof(RECYCLEINFO)))
		return 0;

	return 1;	
}
//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------
INT CDvsUserDlg::OnSendVideoRate(INITINFO* pInit)
{
CMD_SIGNAL myCmd;

	myCmd.dwFlag		= CLIENT2SERVER;
	myCmd.dwMainCmd		= VIDEORATE;
	myCmd.dwSubCmd		= 0;
	myCmd.dwLength		= sizeof(INITINFO);

	if(!ctrlSock.SendProc(&myCmd, sizeof(CMD_SIGNAL)))
		return 0;

	if(!ctrlSock.SendProc(pInit, sizeof(INITINFO)))
		return 0;

	return 1;		
}
//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------
INT CDvsUserDlg::OnSendSPConfig(DWORD dwCardGUID, INT iBaudRate)
{
CMD_SIGNAL	myCmd;
INITINFO	init;

init.dwBmpSize	= dwCardGUID;//编码器GUID
init.dwColor	= 0;		//图象颜色
init.dwBaudRate	= iBaudRate;//波特率
init.dwByteSize	= 8;		//数据位
init.dwParity	= 0;		//奇偶校验
init.dwStopBits	= 1;		//停止位
init.dwReserve1	= 1;		//开始位
init.dwReserve2	= 0;		//保留	

	myCmd.dwFlag		= CLIENT2SERVER;
	myCmd.dwMainCmd		= SPCONFIG;
	myCmd.dwSubCmd		= 0;
	myCmd.dwLength		= sizeof(INITINFO);

	if(!ctrlSock.SendProc(&myCmd, sizeof(CMD_SIGNAL)))
		return 0;

	if(!ctrlSock.SendProc(&init, sizeof(INITINFO)))
		return 0;

	return 1;	
}
//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------

⌨️ 快捷键说明

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