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

📄 rightvod.cpp

📁 实时监控
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// RightVOD.cpp : implementation file
//

#include "stdafx.h"
#include "..\dvrmanager.h"
#include "net.h"
#include "ip_port.h"
#include "RightVOD.h"
#include "RightLogin.h"
#include "../utils/common.h"
#include "../video/video_channel.h"
#include "../utils/update_data.h"
#include "vector"

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

/////////////////////////////////////////////////////////////////////////////
// CRightVOD dialog

CString add_comma(DWORD x, TCHAR comma = _T(','))
{
	std::vector<TCHAR> a;
	DWORD y = x;
	int k=0;
	for( int i=0; y; i++ )
	{
		if( k && (((k+1) % 4) == 0) )
		{
			a.push_back(comma);
			k++;
		}
//		else
//		{
		a.push_back(_T('0')+(y%10));
		y/=10;
		k++;
//		}
	}
	a.push_back(_T('\0'));
	CString xx = &a[0];
	xx.MakeReverse();

	return xx;
}

//##ModelId=3F90BAAA0306
CRightVOD* CRightVOD::self = NULL;
//##ModelId=3F90BAAA033F
CRightVOD* CRightVOD::the_one() {return self;}

//##ModelId=3F90BAAA0335
CRightVOD::CRightVOD(CWnd* pParent /*=NULL*/)
	: baseclass(CRightVOD::IDD, pParent)
{
	//{{AFX_DATA_INIT(CRightVOD)
	m_channel = -1;
	m_which = -1;
	m_timerec = TRUE;
	m_handrec = TRUE;
	m_motionrec = TRUE;
	m_alarmrec = TRUE;
	//m_type=-1;
	m_starttime = CTime::GetCurrentTime();
	//}}AFX_DATA_INIT

	ZeroMemory(&opt1, sizeof(opt1));
	ZeroMemory(&opt2, sizeof(opt2));
	ZeroMemory(&opt3, sizeof(opt3));
	ZeroMemory(&opt4, sizeof(opt4));
	for(int i=0;i<16;i++)
        vod_opened[i]=false;

	self = this;
}

//##ModelId=3F90BAAB0124
void CRightVOD::DoDataExchange(CDataExchange* pDX)
{
	baseclass::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CRightVOD)
	DDX_Control(pDX, ID_S, m_s);
	DDX_Control(pDX, IDBTN_FRAME, m_btn_frame);
	DDX_Control(pDX, ID_DATE, m_startdate);
	DDX_Control(pDX, IDBTN_STOP, m_btn_stop);
	DDX_Control(pDX, IDBTN_PLAY, m_btn_play);
	DDX_Control(pDX, IDBTN_PAUSE, m_btn_pause);
	DDX_Control(pDX, IDBTN_FF, m_btn_ff);
	DDX_Control(pDX, IDBTN_FB, m_btn_fb);
	DDX_Control(pDX, ID_7, m_7);
	DDX_Control(pDX, IDLST_FILES, m_files);
	DDX_Control(pDX, IDLST_DATE, m_date);
	DDX_Control(pDX, IDCB_WHICH, m_cbwhich);
	DDX_Control(pDX, IDCB_CHANNEL, m_cbchannel);
	DDX_Control(pDX, IDBTN_REFRESH, m_btn_refresh);
	DDX_Control(pDX, ID_TITLE, m_title);

	DDX_Check(pDX, IDC_TIMEREC_CHECK, m_timerec);
	DDX_Check(pDX, IDC_HANDREC_CHECK, m_handrec);
	DDX_Check(pDX, IDC_MOTIONREC_CHECK, m_motionrec);
	DDX_Check(pDX, IDC_ALARMREC_CHECK, m_alarmrec);

	DDX_Control(pDX, IDC_TIMEREC_CHECK, m_timerec_ctl);
	DDX_Control(pDX, IDC_HANDREC_CHECK, m_handrec_ctl);
	DDX_Control(pDX, IDC_MOTIONREC_CHECK, m_motionrec_ctl);
	DDX_Control(pDX, IDC_ALARMREC_CHECK, m_alarmrec_ctl);
	DDX_Control(pDX, ID_4, m_4);
	DDX_Control(pDX, ID_3, m_3);
	DDX_Control(pDX, ID_2, m_2);
	DDX_Control(pDX, ID_1, m_1);
	DDX_CBIndex(pDX, IDCB_CHANNEL, m_channel);
	DDX_CBIndex(pDX, IDCB_WHICH, m_which);
	//DDX_CBIndex(pDX, IDCB_TYPE, m_type);
	DDX_DateTimeCtrl(pDX, IDTIME_START, m_starttime);
	DDX_Control(pDX, IDTAB_VOD, m_tabctrl);
	//}}AFX_DATA_MAP

	CString str;
	m_cbwhich.GetWindowText(str);
	video_channel* p = video_channel::current_sel();
	UINT ids[] = {IDCB_CHANNEL, IDLST_DATE, IDLST_FILES};
	for( int i=0; i<SIZE_OF(ids); i++ )
	{
		GetDlgItem(ids[i])->EnableWindow(!str.IsEmpty() && !vod_opened[p->index()] );
		GetDlgItem(ids[i])->EnableWindow(!str.IsEmpty());
	}

	//m_cbwhich.EnableWindow(!vod_opened[p->index()]);
	
	m_cbchannel.GetWindowText(str);
	GetDlgItem(IDBTN_REFRESH)->EnableWindow(!str.IsEmpty());
//	GetDlgItem(IDTAB_VOD)->EnableWindow(!str.IsEmpty());

	bool pause_enable = false;
	if( vod_opened[p->index()] )
		pause_enable = true;
	if( paused() )
		pause_enable = false;
	VOD_SPEED vs = get_vod_speed();
//	m_btn_play.EnableWindow(vs!= VS_PLAYx1);
	m_btn_pause.EnableWindow(pause_enable);
	
	int idx = m_files.GetCurSel();
	UINT ids1[] = {IDTIME_START};//, IDBTN_PLAY};
	for( i=0; i<SIZE_OF(ids1); i++ )
	{
		GetDlgItem(ids1[i])->EnableWindow(m_files.GetCurSel()!=-1);
	}

	m_btn_pause.EnableWindow(vod_opened[p->index()]);
	m_btn_stop.EnableWindow(vod_opened[p->index()]);
	m_btn_ff.EnableWindow(vod_opened[p->index()]);
	m_btn_fb.EnableWindow(vod_opened[p->index()]);
	m_btn_frame.EnableWindow(vod_opened[p->index()]);

	m_btn_pause.EnableWindow(pause_enable);


	GetDlgItem(IDTIME_START)->EnableWindow(!vod_opened[p->index()]);
	GetDlgItem(IDBTN_REFRESH)->EnableWindow(!vod_opened[p->index()]);
	GetDlgItem(IDTIME_START)->EnableWindow(true);
	GetDlgItem(IDBTN_REFRESH)->EnableWindow(true);

#define CASE(x, y) case VS_##x: y.SetWindowText(IDString(IDS_##x)); break;

	if( vod_opened[p->index()] )
	{
		VOD_SPEED vs = get_vod_speed();
		restore_default_btn_text();
		switch(vs)
		{
		CASE(PLAYx1, m_btn_play);
		CASE(PLAYx2, m_btn_play);
		CASE(PLAYx3, m_btn_play);

		CASE(FFx1, m_btn_ff);
		CASE(FFx2, m_btn_ff);
		CASE(FFx3, m_btn_ff);
		CASE(FFx4, m_btn_ff);

		CASE(FBx1, m_btn_fb);
		CASE(FBx2, m_btn_fb);
		CASE(FBx3, m_btn_fb);
		CASE(FBx4, m_btn_fb);
		}
	}
}

void CRightVOD::restore_default_btn_text()
{
	m_btn_ff.SetWindowText(IDString(IDS_FFx1));
	m_btn_play.SetWindowText(IDString(IDS_PLAYx1));
	m_btn_fb.SetWindowText(IDString(IDS_FBx1));
}

BEGIN_MESSAGE_MAP(CRightVOD, baseclass)
	//{{AFX_MSG_MAP(CRightVOD)
	ON_CBN_SELCHANGE(IDCB_WHICH, OnSelchangeWhich)
	ON_CBN_SELCHANGE(IDCB_CHANNEL, OnSelchangeChannel)
	ON_BN_CLICKED(IDBTN_REFRESH, OnRefresh)
	ON_LBN_SELCHANGE(IDLST_DATE, OnDate)
	ON_BN_CLICKED(IDBTN_PLAY, OnPlay)
	ON_BN_CLICKED(IDBTN_PAUSE, OnPause)
	ON_BN_CLICKED(IDBTN_STOP, OnStop)
	ON_BN_CLICKED(IDBTN_FF, OnFf)
	ON_BN_CLICKED(IDBTN_FB, OnFb)
	ON_LBN_SELCHANGE(IDLST_FILES, OnFiles)
	ON_BN_CLICKED(IDBTN_FRAME, OnFrame)
	
	ON_BN_CLICKED(IDC_TIMEREC_CHECK, Onupdatefile)
	ON_BN_CLICKED(IDC_HANDREC_CHECK, Onupdatefile)
	ON_BN_CLICKED(IDC_MOTIONREC_CHECK, Onupdatefile)
	ON_BN_CLICKED(IDC_ALARMREC_CHECK, Onupdatefile)
	
	ON_NOTIFY(TCN_SELCHANGE, IDTAB_VOD, OnSelchangeVod)

	ON_WM_TIMER()
	//}}AFX_MSG_MAP
	ON_MESSAGE(WM_UPDATE_DATA, on_update_data)
	ON_MESSAGE(WM_OPEN_VOD, on_vod_opened)
	ON_MESSAGE(WM_CLOSE_VOD, on_vod_closed)
	ON_MESSAGE(WM_SET_VOD_SPEED, on_vod_set_speed)
	MSG2(NTM_OPT_GET_OK, on_get_ok)
	MSG2(WM_LOGGED_OUT, on_logged_out)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CRightVOD message handlers

//##ModelId=3F90BAAB01BA
BOOL CRightVOD::OnInitDialog() 
{
	baseclass::OnInitDialog();
	init_label(m_1);
	init_label(m_3);
	init_label(m_4);
    //init_label(m_5);
	init_label(m_startdate);
	init_title(m_title);
	
	CString str;
	str.LoadString(IDS_REC_DATA);
	m_tabctrl.InsertItem(0,str);
	str.LoadString(IDS_BACK_DATA);
	m_tabctrl.InsertItem(1,str);
	CSize size(1,15);
	m_tabctrl.SetItemSize(size);
//	GetDlgItem(IDTAB_VOD)->ShowWindow(SW_SHOW);

	return TRUE;  // return TRUE unless you set the focus to a control
	              // EXCEPTION: OCX Property Pages should return FALSE
}

//##ModelId=3F90BAAA02E5
CString CRightVOD::get_alias()
{
	CString alias;
	UpdateData();
	if( m_which == -1 )
		return alias;
	m_cbwhich.GetLBText(m_which, alias);
	return alias;
}

//##ModelId=3F90BAAB01CE
void CRightVOD::OnSelchangeWhich() 
{

	GET_ALIAS;
	fill_combo_chnls(alias, &m_cbchannel);
	m_channel = 0;
	//m_type=0;
	UpdateData(FALSE);
	OnRefresh();	
}

//##ModelId=3F90BAAB01D8
void CRightVOD::OnSelchangeChannel() 
{
	
	UpdateData();
	OnRefresh();
}

//##ModelId=3F90BAAA02B5
void CRightVOD::on_join()
{
	m_cbwhich.ResetContent();
	fill_combo(&m_cbwhich);
	m_cbchannel.EnableWindow(FALSE);
}

//##ModelId=3F90BAAA02BE
void CRightVOD::on_leave()
{
//	m_cbwhich.ResetContent();
//	m_cbchannel.ResetContent();

//	m_date.ResetContent();
//	m_files.ResetContent();
}

//void CRightVOD::on_get_ok(DWORD ip, USHORT port, NET_OPTIONS no, void* stuff)
MSG3(on_get_ok, CRightVOD)
{
	NET_OPTIONS no = (NET_OPTIONS)w;
	void* stuff = (void*)l;

	if( no == OPT_VOD_DATE )
	{
		ZeroMemory(&opt1, sizeof(opt1));
		TREC_DATELIST* d = (TREC_DATELIST*)stuff;
		memcpy(&opt1, stuff, 1+d->num*sizeof(TREC_DATE));
		PostMessage(WM_UPDATE_DATA, FALSE, OPT_VOD_DATE);
	}
	if( no == OPT_VOD_FILE )
	{
		ZeroMemory(&opt2, sizeof(opt2));
		TREC_FILESEGLIST* f = (TREC_FILESEGLIST*)stuff;
		memcpy(&opt2, stuff, 5+f->num*sizeof(TREC_FILESEG));
		PostMessage(WM_UPDATE_DATA, FALSE, OPT_VOD_FILE);
	}

	if( no == OPT_VOD_DATE_EXT )
	{
		ZeroMemory(&opt3, sizeof(opt3));
		TREC_DATELIST_EXT* d = (TREC_DATELIST_EXT*)stuff;
		memcpy(&opt3, stuff, 2+d->num*sizeof(TREC_DATE));
		PostMessage(WM_UPDATE_DATA, FALSE, OPT_VOD_DATE_EXT);
	}
	if( no == OPT_VOD_FILE_EXT )
	{
		ZeroMemory(&opt4, sizeof(opt4));
		TREC_FILESEGLIST_EXT* f = (TREC_FILESEGLIST_EXT*)stuff;
		memcpy(&opt4, stuff, 6+f->num*sizeof(TREC_FILESEG));
		PostMessage(WM_UPDATE_DATA, FALSE, OPT_VOD_FILE_EXT);
	}
	if( no == OPT_VOD_END )
		info_balloon(IDS_VOD_END);
	return 0;
}

//##ModelId=3F90BAAB01F6
void CRightVOD::OnRefresh() 
{
	m_date.ResetContent();
	GET_ALIAS;
	int index = m_tabctrl.GetCurSel();
	switch(index) {
	case 0: 
		get_net_opt(alias, OPT_VOD_DATE, m_channel, m_hWnd);
		break;
	case 1: 
		get_net_opt(alias, OPT_VOD_DATE, m_channel+100, m_hWnd);
		break;
	default: ;
	}
}

const LPCTSTR date_format = _T("%04d-%02d-%02d");
const LPCTSTR file_format = _T("%02d:%02d:%02d ~ %02d:%02d:%02d @ %s Kb");

static LPCTSTR FMTERROR = _T("Format of date data from remote machine is invalid!");

void save_log(LPCTSTR logfile, void* data, int size)
{
	FILE* fp = fopen(logfile, "wb");
	if( !fp )
		return;
	fwrite(data, size, 1, fp);
	fclose(fp);
}

//##ModelId=3F90BAAB0142
LRESULT CRightVOD::on_update_data(WPARAM w, LPARAM l)
{
	if( w == FALSE )
	{
		if( l == OPT_VOD_DATE || l == OPT_VOD_DATE_EXT)
		{
			int allnum = 0;
			void *pdate = NULL;

			if(l == OPT_VOD_DATE)
			{
				allnum = opt1.num;
				pdate = &opt1;
			}
			if(l == OPT_VOD_DATE_EXT)
			{
				allnum = opt3.num;
				pdate = &opt3;
			}

			//m_date.SetRedraw(FALSE);

⌨️ 快捷键说明

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