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

📄 dvsuserinit.cpp

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

#include "DvsUserReg.h"

#include "Welcome.h"

#include "ListenCmdThread.h"
#include "ListenDataThread.h"

#include "WorkDevice.h"

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

#define	WM_ICONMESSAGE	WM_USER + 1001
//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------
int CDvsUserDlg::Initialize()
{
	if(!InitFileName())
	{
		return TRUE;
	}

	InitReg();

//	USER[0].bUserState		= 1;
//	USER[0].dwUserPriority	= 4;
//	sprintf(USER[0].szUserName, "%s", _TEXT("调度员"));


	if(!InitSocket())
	{
		return TRUE;
	}


//	if(!Login())
//	{
//		return TRUE;
//	}
	
	InitFrame();
	
	SetUserPower(CLIENT.dwUserPriority);

	g_nFileSaveTime		= 5;
	g_strFileSavePath	= "D:\\data";

	return 1;
}
//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------
int CDvsUserDlg::Finitialize()
{
	m_bExit		= TRUE;

	/*LOG FILE*/
	m_Log.WriteLog(CLog::LOGOUT, CLIENT.szUserName, CLIENT.dwUserPriority);

	connSock.Close();

	cmdListenSock.Close();
	THREAD_DELETE(cmdListenThread);

	dataListenSock.Close();
	THREAD_DELETE(dataListenThread);

	ctrlSock.Close();
	THREAD_DELETE(recvCmdThread);

	for(int i=0; i<4; i++)
	{
		if(pWork[i])
		{
			delete pWork[i];
			pWork[i] = NULL;	
		}
	}

	if(m_hBmp){::DeleteObject(m_hBmp); m_hBmp = NULL;}
	
	return 1;
}
//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------
int CDvsUserDlg::DestroyAllLink()
{
	for(int i=0; i<4; i++)
	{
		if(LINK[i].bLinkState == TRUE)
		{
			OnSendVideoStop(LINK[i].dwCard, LINK[i].dwBrance);
		}
	}
	return 1;
}
//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------
int CDvsUserDlg::InitFileName()
{
CHAR	szTemp[260];
CString	strTemp1;
CString strTemp2;
	
	::GetModuleFileName(NULL, szTemp, 260);
	strTemp2 = szTemp;

	strTemp1			= strTemp2.Right(11);
	if(strTemp1.CompareNoCase("DvsUser.exe") != 0)
	{
		MessageBox(_TEXT("文件已被破坏,请重新安装系统!"), _TEXT("错误"), 0|MB_ICONSTOP);
		CDialog::OnCancel();
		return 0;
	}

	m_strModulePath = strTemp2.Left(strTemp2.GetLength() - strTemp1.GetLength() - 1);

	/*LOG FILE*/
	CreateDirectory(m_strModulePath + "\\LOG", NULL);
	m_Log.SetLogFileName(m_strModulePath + "\\LOG\\USER.EVT");	

	return 1;
}
//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------
int CDvsUserDlg::Login()
{
	CWelcome	dlg;
	if(IDOK != dlg.DoModal())
	{
		/*LOG FILE*/
		m_Log.WriteLog(CLog::LOGERR, dlg.m_strUserName, dlg.m_logUser.dwUserPriority);

		CDialog::OnCancel();
		return 0;
	}

	/*LOG FILE*/
	m_Log.WriteLog(CLog::LOGIN, dlg.m_strUserName, dlg.m_logUser.dwUserPriority);

	char	szName[100];
	gethostname(szName, 100);
	hostent* ht = gethostbyname(szName);
	sprintf(CLIENT.szUserName, "%s", dlg.m_strUserName);
	sprintf(CLIENT.szIPAddr, "%d.%d.%d.%d", (BYTE)ht->h_addr_list[0][0],
											(BYTE)ht->h_addr_list[0][1],
											(BYTE)ht->h_addr_list[0][2],
											(BYTE)ht->h_addr_list[0][3]);
	CLIENT.uiCmdPort		= 8000;
	CLIENT.uiDataPort		= 8001;
	CLIENT.dwUserPriority	= dlg.m_logUser.dwUserPriority;
	
	DWORD dwSubInfo = 0xaaaaffff;
	connSock.SetTimeOut(-1);
	if(connSock.Create())
	{
		if(connSock.Connect(dlg.m_strServerIP, 6000))
		{
			if(connSock.SendProc(&CLIENT, sizeof(CLIENTINFO)))
			{
				if(connSock.RecvProc(&dwSubInfo, sizeof(DWORD)))
				{
					cmdListenThread->Resume();
					dataListenThread->Resume();
					return 1;
				}
				else{
					MessageBox(_TEXT("网络连接成功,但服务器拒绝登录,请检测如下可能问题!\n1.试图以super权限登录,但系统中已存在一个super权限用户\n2.系统中连接的用户过多"), 
					_TEXT("错误"), 0|MB_ICONINFORMATION);
					CDialog::OnCancel();
					return 0;
				}
			}
		}
	}
	
	MessageBox(_TEXT("无法连接到服务器,请检测网络状况!"), _TEXT("错误"), 0|MB_ICONINFORMATION);
	CDialog::OnCancel();
	return 0;
}
//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------
int CDvsUserDlg::InitReg()
{
  CDvsUserReg	reg;
	
	reg.GetUserInfo(USER);
	return 1;
}
//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------
int CDvsUserDlg::InitSocket()
{
	cmdListenSock.SetTimeOut(-1);
	if(!cmdListenSock.Create(8000))
	{
		::MessageBox(this->m_hWnd, _TEXT("无法初始化网络"), _TEXT("错误"), MB_ICONEXCLAMATION|0);
		CDialog::OnCancel();
		return FALSE;
	}

	dataListenSock.SetTimeOut(-1);
	if(!dataListenSock.Create(8001)) 
	{
		::MessageBox(this->m_hWnd, _TEXT("无法初始化网络"), _TEXT("错误"), MB_ICONEXCLAMATION|0);
		CDialog::OnCancel();
		return FALSE;
	}
	

	cmdListenSock.Listen();
	dataListenSock.Listen();

	cmdListenThread	= new CListenCmdThread();
	cmdListenThread->Create(this);
		
	dataListenThread = new CListenDataThread();
	dataListenThread->Create(this);

	for(int i=0; i<4; i++)
	{
//		pWork[i] = new CWorkDevice();
//		pWork[i]->Init();
	}
		
	return 1;
}
//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------
int CDvsUserDlg::InitFrame()
{
  int cx, cy;
	cx	= ::GetSystemMetrics(SM_CXSCREEN);
	cy	= ::GetSystemMetrics(SM_CYSCREEN);
	
	::SetWindowPos(this->m_hWnd, 0/*HWND_TOPMOST*/, 0, 0, cx, cy, 0);

	ToolTip.Create(this, TTS_ALWAYSTIP);
	ToolTip.SetDelayTime(500);
////////////////////////////////////////////////////////////////////////////////////////
	nfd.cbSize		= sizeof(NOTIFYICONDATA);
	nfd.uFlags		= NIF_ICON|NIF_TIP|NIF_MESSAGE;
	nfd.hWnd		= this->m_hWnd;
	nfd.uID			= IDR_MAINFRAME;
	nfd.hIcon		= m_hTray;
	sprintf(nfd.szTip, "%s", _TEXT("万力终端程序"));
	nfd.uCallbackMessage = WM_ICONMESSAGE;
////////////////////////////////////////////////////////////////////////////////////////
	m_view1_bar.MoveWindow		(44,	14,		352,	16);
	m_view1.MoveWindow			(44,	14+16,	352,	288);

	m_view2_bar.MoveWindow		(405,	14,		352,	16);
	m_view2.MoveWindow			(405,	14+16,	352,	288);

	m_view3_bar.MoveWindow		(44,	327,	352,	16);
	m_view3.MoveWindow			(44,	327+16,	352,	288);

	m_view4_bar.MoveWindow		(405,	327,	352,	16);
	m_view4.MoveWindow			(405,	327+16,	352,	288);

//	imageCamera.Create(16, 16, ILC_COLOR16, 1, 1);
//	imageCamera.Add(m_hCamera);
//	m_video_list.SetImageList(&imageCamera, LVSIL_SMALL);

//	m_video_list.MoveWindow		(798,	47,		194,	293);
//	m_video_list.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_ONECLICKACTIVATE|LVS_EX_FLATSB);
//	m_video_list.SetBkColor(RGB(125, 168, 243));
//	m_video_list.SetTextBkColor(RGB(125, 168, 243));
//	m_video_list.SetTextColor(RGB(0, 0, 128));
//	m_video_list.InsertColumn(0, _TEXT("摄象机名称"), LVCFMT_LEFT, 130);
//	m_video_list.InsertColumn(1, _TEXT("云台"), 0, 40);
//	m_video_list.InsertColumn(2, _TEXT("灯源"), 0, 40);
	
	imageCamera.Create(16, 16, ILC_COLOR16, 1, 1);
	imageCamera.Add(m_hCard);
	imageCamera.Add(m_hCamera);
	m_video_tree.SetImageList(&imageCamera, TVSIL_NORMAL);
	m_video_tree.MoveWindow		(798,	47,		194,	293);
//	m_video_tree.SetBkColor(RGB(125, 168, 243));
	m_video_tree.SetTextColor(RGB(0, 0, 128));
	
////////////////////////////////////////////////////////////////////////////////////////
	m_btn_start.SubclassDlgItem(IDC_BTN_START, this);
	m_btn_start.MoveWindow		(70,	688,	100,	40);
	m_btn_start.SetIcon(IDI_START, IDI_START, 32, 32);
	m_btn_start.SetInactiveBgColor(RGB(148, 162, 198));
	m_btn_start.SetActiveBgColor(RGB(125, 168, 243));
	ToolTip.AddTool(&m_btn_start, _TEXT("开始实时显示图象"));
	
	m_btn_video.SubclassDlgItem(IDC_BTN_VIDEO, this);
	m_btn_video.MoveWindow		(190,	688,	100,	40);
	m_btn_video.SetIcon(IDI_VIDEO, IDI_VIDEO, 32, 32);
	m_btn_video.SetInactiveBgColor(RGB(148, 162, 198));
	m_btn_video.SetActiveBgColor(RGB(125, 168, 243));
	ToolTip.AddTool(&m_btn_video, _TEXT("开始存储数字录像"));

	m_btn_playback.SubclassDlgItem(IDC_BTN_PLAYBACK, this);
	m_btn_playback.MoveWindow	(310,	688,	100,	40);
	m_btn_playback.SetIcon(IDI_PLAYBACK, IDI_PLAYBACK, 32, 32);
	m_btn_playback.SetInactiveBgColor(RGB(148, 162, 198));
	m_btn_playback.SetActiveBgColor(RGB(125, 168, 243));
	ToolTip.AddTool(&m_btn_playback, _TEXT("回放已存储的视频文件"));
	
	m_btn_config.SubclassDlgItem(IDC_BTN_CONFIG, this);
	m_btn_config.MoveWindow		(430,	688,	100,	40);
	m_btn_config.SetIcon(IDI_CONFIG, IDI_CONFIG, 32, 32);
	m_btn_config.SetInactiveBgColor(RGB(148, 162, 198));
	m_btn_config.SetActiveBgColor(RGB(125, 168, 243));
	ToolTip.AddTool(&m_btn_config, _TEXT("设置有关参数"));
	
	m_btn_device.SubclassDlgItem(IDC_BTN_DEVICE, this);
	m_btn_device.MoveWindow		(550,	688,	100,	40);
	m_btn_device.SetIcon(IDI_DEVICE, IDI_DEVICE, 32, 32);
	m_btn_device.SetInactiveBgColor(RGB(148, 162, 198));
	m_btn_device.SetActiveBgColor(RGB(125, 168, 243));
	ToolTip.AddTool(&m_btn_device, _TEXT("进行云台控制"));
	
	m_btn_exit.SubclassDlgItem(IDC_BTN_EXIT, this);
	m_btn_exit.MoveWindow		(670,	688,	100,	40);
	m_btn_exit.SetIcon(IDI_EXIT, IDI_EXIT, 32, 32);
	m_btn_exit.SetInactiveBgColor(RGB(148, 162, 198));
	m_btn_exit.SetActiveBgColor(RGB(125, 168, 243));
	ToolTip.AddTool(&m_btn_exit, _TEXT("退出本系统"));
////////////////////////////////////////////////////////////////////////////////////////
	m_interface_save1.LoadBitmaps(IDB_SAVE1_UP, IDB_SAVE1_DOWN);
	m_interface_save1.Create(CRect(0,0,0,0), this, IDC_INTERFACE_SAVE1);
	m_interface_save1.MoveWindow(790, 420, 63, 26);
	ToolTip.AddTool(&m_interface_save1, _TEXT("存储视窗1的视频为AVI文件"));

	m_interface_save2.LoadBitmaps(IDB_SAVE2_UP, IDB_SAVE2_DOWN);
	m_interface_save2.Create(CRect(0,0,0,0), this, IDC_INTERFACE_SAVE2);
	m_interface_save2.MoveWindow(870, 420, 63, 26);
	ToolTip.AddTool(&m_interface_save2, _TEXT("存储视窗2的视频为AVI文件"));

	m_interface_save3.LoadBitmaps(IDB_SAVE3_UP, IDB_SAVE3_DOWN);
	m_interface_save3.Create(CRect(0,0,0,0), this, IDC_INTERFACE_SAVE3);
	m_interface_save3.MoveWindow(790, 460, 63, 26);
	ToolTip.AddTool(&m_interface_save3, _TEXT("存储视窗3的视频为AVI文件"));

	m_interface_save4.LoadBitmaps(IDB_SAVE4_UP, IDB_SAVE4_DOWN);
	m_interface_save4.Create(CRect(0,0,0,0), this, IDC_INTERFACE_SAVE4);
	m_interface_save4.MoveWindow(870, 460, 63, 26);
	ToolTip.AddTool(&m_interface_save4, _TEXT("存储视窗4的视频为AVI文件"));

	m_interface_review1.LoadBitmaps(IDB_RECYC1_UP, IDB_RECYC1_DOWN);
	m_interface_review1.Create(CRect(0,0,0,0), this, IDC_INTERFACE_REVIEW1);
	m_interface_review1.MoveWindow(790, 540, 63, 26);
	ToolTip.AddTool(&m_interface_review1, _TEXT("循环显示当前编码器的8路视频"));

	m_interface_review2.LoadBitmaps(IDB_RECYC2_UP, IDB_RECYC2_DOWN);
	m_interface_review2.Create(CRect(0,0,0,0), this, IDC_INTERFACE_REVIEW2);
	m_interface_review2.MoveWindow(870, 540, 63, 26);
	ToolTip.AddTool(&m_interface_review2, _TEXT("循环显示当前编码器的8路视频"));

	m_interface_review3.LoadBitmaps(IDB_RECYC3_UP, IDB_RECYC3_DOWN);
	m_interface_review3.Create(CRect(0,0,0,0), this, IDC_INTERFACE_REVIEW3);
	m_interface_review3.MoveWindow(790, 580, 63, 26);
	ToolTip.AddTool(&m_interface_review3, _TEXT("循环显示当前编码器的8路视频"));

	m_interface_review4.LoadBitmaps(IDB_RECYC4_UP, IDB_RECYC4_DOWN);
	m_interface_review4.Create(CRect(0,0,0,0), this, IDC_INTERFACE_REVIEW4);
	m_interface_review4.MoveWindow(870, 580, 63, 26);
	ToolTip.AddTool(&m_interface_review4, _TEXT("循环显示当前编码器的8路视频"));

///////////////////////////////////////////////////////////////////////////////////////
	m_bmLeft.LoadBitmap(IDB_LEFT);
	m_bmTop.LoadBitmap(IDB_TOP);
	m_bmRight.LoadBitmap(IDB_RIGHT);
	m_bmBottom.LoadBitmap(IDB_BOTTOM);
	m_bmVLine.LoadBitmap(IDB_VLINE);
	m_bmHLine.LoadBitmap(IDB_HLINE);

	m_hBmp = (HBITMAP)LoadImage(AfxGetApp()->m_hInstance, m_strModulePath+"\\BMP\\blank.BMP", IMAGE_BITMAP, 0, 0, 
		LR_CREATEDIBSECTION | LR_DEFAULTSIZE | LR_LOADFROMFILE);


	m_view1.ShowFlagBmp(m_hBmp);
	m_view2.ShowFlagBmp(m_hBmp);
	m_view3.ShowFlagBmp(m_hBmp);
	m_view4.ShowFlagBmp(m_hBmp);

	return 1;
}
//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------
int	CDvsUserDlg::DrawFrame(CDC* pDC)
{
  CDC dcMem; BITMAP b;
	dcMem.CreateCompatibleDC(pDC);
	
	CBitmap* pOld;
	pOld = dcMem.SelectObject(&m_bmTop);
	m_bmTop.GetBitmap(&b);
	pDC->BitBlt(0, 0, b.bmWidth, b.bmHeight, &dcMem, 0, 0, SRCCOPY);

	dcMem.SelectObject(&m_bmBottom);
	m_bmBottom.GetBitmap(&b);
	pDC->BitBlt(44, 768-137, b.bmWidth, b.bmHeight, &dcMem, 0, 0, SRCCOPY);

	dcMem.SelectObject(&m_bmLeft);
	m_bmLeft.GetBitmap(&b);
	pDC->BitBlt(0, 14, b.bmWidth, b.bmHeight, &dcMem, 0, 0, SRCCOPY);

	dcMem.SelectObject(&m_bmRight);
	m_bmRight.GetBitmap(&b);
	pDC->BitBlt(1024-267, 14, b.bmWidth, b.bmHeight, &dcMem, 0, 0, SRCCOPY);

	dcMem.SelectObject(&m_bmHLine);
	m_bmHLine.GetBitmap(&b);
	pDC->BitBlt(43, 318, b.bmWidth, b.bmHeight, &dcMem, 0, 0, SRCCOPY);

	dcMem.SelectObject(&m_bmVLine);
	m_bmVLine.GetBitmap(&b);
	pDC->BitBlt(396, 14, b.bmWidth, b.bmHeight, &dcMem, 0, 0, SRCCOPY);

	dcMem.SelectObject(pOld);
	return 1;
}
//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------
void CDvsUserDlg::SetUserPower(int iClass)
{
	switch(iClass)
	{
	case	1:
		m_btn_video.EnableWindow(FALSE);
		m_btn_config.EnableWindow(FALSE);
		m_btn_device.EnableWindow(FALSE);
		break;

	case	2:
		m_btn_video.EnableWindow(TRUE);
		m_btn_config.EnableWindow(FALSE);
		m_btn_device.EnableWindow(TRUE);
		break;

	case	3:
		m_btn_video.EnableWindow(TRUE);
		m_btn_config.EnableWindow(TRUE);
		m_btn_device.EnableWindow(TRUE);
		break;

	case	4:
		m_btn_video.EnableWindow(TRUE);
		m_btn_config.EnableWindow(TRUE);
		m_btn_device.EnableWindow(TRUE);
		break;
	}
}
//--------------------------------------------------------------------
//
//
//
//--------------------------------------------------------------------

⌨️ 快捷键说明

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