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

📄 rightlogin.cpp

📁 实时监控
💻 CPP
📖 第 1 页 / 共 5 页
字号:
			ip_port m_ipp(p->ip, p->port);
		    login(m_ipp, p->dvrname, p->logindvrname, p->logindvrpass,true);
			return ;
		  }  
		}
		return;
	}

	if(m_item == 4+m_channels_count)
	{
		m_loginagain[idx]=false;
		m_opensetbool[idx]=false;
		m_openping[idx]=false;
		m_showpopedom[idx]=true;
   	    channel_info& ref = cmgr[m_int];
		CShowPopedom showpopedom;

		showpopedom.m_ipp = ref.get_ip_port();
        showpopedom.DoModal();
	}
	if(m_item == 5+m_channels_count)
	{
		ref.set_opened_type();
	}
}

///电子地图打开视频部分;

void CRightLogin::open_channel_map_video(const ip_port& ipp,int channel)
{
	  channel_info* ci1 = cmgr.find(ipp);
	  if( !ci1 ) 
	  {
		  AfxMessageBox(IDS_NOT_LOGIN_STATION);
		  return;
	  }
	  if( ci1->is_opened(channel) || get_open_channel_window(ipp, channel))
	  {
		msgbox(IDS_CHNL_OPENED, IDS_WARNING, MB_OK|MB_ICONWARNING, this);
		return;
	  }
	  show_map_dialog(ipp, channel);
}
void CRightLogin::show_map_dialog(const ip_port& ipp,int channel)
{
	 if(!p_map_image)
	  {
		p_map_image = new CSHOWMAPIMAGE;
		p_map_image->Create(this, ipp, channel);
	  }
	  else
	  {
		  p_map_image->SetActiveWindow();
		  if(!p_map_image->Onsamevalue(ipp, channel))
		  {
			  p_map_image->set_map_value(ipp, channel);
			  net_close_local_channel(net, 255);
		  }
		  else
		  {
			  p_map_image->ShowWindow(SW_SHOWNORMAL);
			  return;
		  }	
	  }

	  net_open_remote_channel(net, ipp.get_ip(), ipp.look_port(), channel, 255, p_map_image->m_static.m_hWnd,FALSE);
	  p_map_image->ShowWindow(SW_SHOWNORMAL);
}

void CRightLogin::close_map_image()
{
	net_close_local_channel(net, 255);
	//delete p_map_image;
	p_map_image = NULL;
}


void CRightLogin::open_channelvideo(const ip_port& ipp,int channel,int window,int nettype)
{
	  ip_port ippp = ipp;
	  ULONG ip = net_get_host_by_name(net, ippp.str_ip());
	  if(!ip)
			return ;
	  ippp = ip_port(ip, ipp.look_port());
	  BOOL bUdpav = FALSE;
      channel_info* ci1 = cmgr.find(ippp);
	  if( !ci1 ) return;
	  if(!ci1->logintrue()) return;
	  if(channel > ci1->get_channels()) return;
	  if(check_open_channel_window_all(ippp, channel-1)) return;
	  if(ci1->get_udp())
		  bUdpav = nettype;
	  video_channel* p = get_video_channel(window-1);
	  if(p->is_video_opened())
	  {
		  open_window_poll(window);
		  
		  //msgbox(IDS_CHNL_OPENED, IDS_WARNING, MB_OK|MB_ICONWARNING, this);
		  return;
	  }
	  p->tcpudp_server = ci1->get_udp();
	  p->m_Slow = bUdpav;
	  p->SendMessage(NTM_CMD_CHANNEL_OPENED, ippp.get_ip(), 
		MAKEDWORD(ippp.look_port(),channel-1));
	  net_open_remote_channel(net, 
		ippp.get_ip(), 
		ippp.look_port(), 
		channel-1, 
		window-1,
		p->m_hWnd,
		bUdpav);

}

/*
  要求说明的两点:
  1、window打开和存储时都是从1开始计数的;
  2、channel打开的时候是从0开始计数的,存储是从1开始计数的;
*/
void CRightLogin::set_window_poll(int window)
{
    int m_nub=0;
	for(int m=0;m<m_machine_length;m++)
	{  
	  Machine_Channel_Setting * p = &m_clientchannelsetting[m];
	  if(!strcmp(p->name, m_login_client_name)&&!strcmp(p->scene_name, m_scene))
	 {
		ip_port m_ipptrans(p->ip,p->port);
		channel_info* ref = cmgr.find(m_ipptrans);
		if(!ref) 	continue;
	    if(!ref->logintrue()) continue;
		if(p->channel > ref->get_channels()) continue;
		
		if(!p->connect) continue;
	    if(p->window==window)
		{
          m_window_poll[window-1][m_nub] = *p;
		  m_nub++;
		}
	  }
	}
}
void CRightLogin::window_poll_clear()
{
    ZeroMemory(m_window_poll, sizeof(Machine_Channel_Setting)*MAX_VOD_WINDOWS*120);
}

int CRightLogin::onfilemax(int window)
{
	for(int i=0;i<20;i++)
	{
		if(!m_window_poll[window][i].port) return i-1;
	}
    return 0;
}

void CRightLogin::open_window_poll(int window)
{
	m_auto_poll = false;
	int m_time = read_dword(rkSettings, rvwindowpolltime, window);
  	if(!read_dword(rkSettings, rvwindowpoll, 0)) return;
	
	SetTimer(BASE_WINDOW_ID+window-1,m_time*1000,NULL);	
}


#include "msgbox.h"
/*
 *	打开视频通道(由右键菜单调用)
 */
//##ModelId=3F90BAB100AB
void CRightLogin::open_channel(const ip_port& ipp, int channel,int window)
{
	  channel_info* ci1 = cmgr.find(ipp);
	  if( !ci1 )
		return;
	  if(check_open_channel_window_all(ipp, channel))
	  {
	//	msgbox(IDS_CHNL_OPENED, IDS_WARNING, MB_OK|MB_ICONWARNING, this);
		return;
	  }
	  video_channel* p = NULL;
	  if(window == -1)
		  p = video_channel::current_sel();
	  else
		  p = video_channel::number(window);
	  if( p->is_video_opened() )
	  {
		p = NULL;
		for( int i=0; i<video_channel_count(); i++ )
		{
			video_channel* vc = get_video_channel(i);
			if( vc && !vc->is_video_opened() )
			{
				p = vc;
				break;
			}
		}
		if( !p )
			return;

	  }		  
	  BOOL bOpenedType = FALSE;
	  if(ci1->get_udp())
		  bOpenedType = ci1->get_opened_type();
	  p->tcpudp_server = ci1->get_udp();
	  p->m_Slow = bOpenedType;
	  p->SendMessage(NTM_CMD_CHANNEL_OPENED, ipp.get_ip(), 
		  MAKEDWORD(ipp.look_port(),channel));
	  net_open_remote_channel(net, 
		ipp.get_ip(), 
		ipp.look_port(), 
		channel, 
		p->index(),
		p->m_hWnd,
		bOpenedType);
}

/*
 *	处理UpdateData请求
 *	在某些线程中, 同步调用UpdateData会出错.
 *	所以必须用PostMessage(WM_UPDATE_DATA, ?)
 *	?: TRUE, FALSE
 */
// WM_UPDATE_DATA
//##ModelId=3F90BAB20174
LRESULT CRightLogin::OnUpdateData(WPARAM w, LPARAM)
{
	UpdateData(w);
//	SetDlgItemText(ID_VIDEO_TITLE, m_strVideoTitle);
//	SetDlgItemText(ID_CHANNEL_IP, m_strChannelIP);
//	SetDlgItemText(ID_CHANNEL_INDEX, m_strChannelIndex);
	return 0;
}

/*
 *	登录列表框更改选择的处理
 */
//##ModelId=3F90BAB2019C

/*
 *	Close按钮响应, 关闭某个视频通道
 */
//##ModelId=3F90BAB2012E
int get_data_stream(int group, unsigned char * buf, int len, int type, DWORD d1, DWORD d2)
{
	//fprintf(m_log_kk_file, "group = %d len = %d type = %d\n", group, len , type);
	//fflush(m_log_kk_file);
	return len;
}

void add_draw_image(HDC & phDc, DWORD d1, DWORD d2)
{
	SetBkMode(phDc, TRANSPARENT);
	SetBkColor( phDc, RGB( 100, 100, 255 ) );
	SetTextColor( phDc, RGB( 255, 255, 0 ) );
	TextOut( phDc, 100, 400, "aaaaaaaaa", 11);
}

void CRightLogin::OnClose()
{
	video_channel* p = video_channel::current_sel();
	if( !p->is_video_opened() )
		return;
	//SetEncodeStreamProdCallBack(net, p->index(),get_data_stream, NULL, NULL);
	//SetDrawAddImageCallBack(net, p->index(),add_draw_image, NULL, NULL);

	KillTimer(p->index() + BASE_WINDOW_ID);
	close_local_channel(p->index());
}

/*
 *	Close Remote按钮响应, 关闭主机视频通道, 并关闭本地视频通道
 */
//##ModelId=3F90BAB201B1
void CRightLogin::OnCloseRemote() 
{
	video_channel* p = video_channel::current_sel();
	if( !p->is_video_opened() )
		return;

	KillTimer(p->index() + BASE_WINDOW_ID);
	close_remote_channel(p->index());
}

/*
 *	处理从CDlgIPMoniker来的别名登录消息
 */
//##ModelId=3F90BAB10386
LRESULT CRightLogin::OnConnect(WPARAM w, LPARAM)
{
	LPCTSTR ip = (LPCTSTR)w;
	//m_loginip = ip;
	UpdateData(FALSE);
	OnLogin();
	return 0;
}

//##ModelId=3F90BAB10079
CString CRightLogin::alias(const channel_info& ci)
{
	return ipmgr.get_alias(ci.get_ip_port());
}
//DEL BOOL CRightLogin::OnEraseBkgnd(CDC* pDC) 
//DEL {
//DEL 	return TRUE;
//DEL }

vit CRightLogin::find_alarm_list(ULONG sid, ULONG sgid)
{
	for(vit pit = id_list.begin(); pit != id_list.end(); pit++)
	{
		if(!pit)
			continue;
		if((pit->stationid == sid) && (pit->signalid == sgid))
			return pit;
	}

	return NULL;
}

bool CRightLogin::find_station_channel(ULONG pstid, ULONG psgid, ULONG &ip, USHORT &port, int &channel, BOOL m_bool, int & output )
{
	Alarm_Server_Linking m_link[300];

	Cfileoperation <Alarm_Server_Linking> *m_fileoperation;
    int m_length = m_fileoperation->openfile(m_alarm_server_link_directory,"ab+",m_link, 300);

	for(int i=0; i<m_length; i++)
	{
		if(strcmp(m_login_client_name, m_link[i].name))
			continue;

		ULONG stid = atoi(m_link[i].id);
		ULONG stalarmid = atoi(m_link[i].alarmid);

		if((pstid ==  stid) && (psgid == stalarmid))
		{
			get_addr(m_link[i].dvrname, ip, port);
			channel = m_link[i].channel;
			output = m_link[i].output;
			if(m_bool)
			{
				CString m_type_name;
				USHORT data_chan = 0x0001;
				data_chan = data_chan << channel;
				m_type_name.Format(IDS_NET_Alarm);
				ip_port ipport = ip_port(ip, port);
				//ball_alarm(ipport , data_chan, m_type_name);
				AfxGetMainWnd()->PostMessage(NTM_CMD_NETALARM, ip, channel) ;

				char str[200];
				strcpy(str,m_link[i].m_alarmname);
				strcat(str, "--");
				strcat(str, m_link[i].m_alarmtype);
				write_alarm_logfile(ipport, data_chan, 3, str);
			}
			return true;
		}
	}
	return false;
}

oit CRightLogin::find_output_list(ULONG ip, USHORT port)
{
	for(oit pit = outlist.begin(); pit != outlist.end(); pit++)
	{
		if(!pit)
			continue;

		if((pit->ip == ip) && (pit->port == port))
			return pit;
	}

	return NULL;
}

void CRightLogin::open_net_alarm(ULONG ip, USHORT port, int channel, int output)
{
	ip_port m_ipp(ip, port);
	BOOL m_openchan = read_dword(rvNetAlarmsetup, rvNetAlarmopenchan);
	BOOL m_openlight = read_dword(rvNetAlarmsetup, rvNetAlarmopenlight);
	BOOL m_openptz = read_dword(rvNetAlarmsetup, rvNetAlarmopenptz);
	BOOL m_openrecord = TRUE;

	if(m_openchan)
		open_channel(m_ipp, channel,-1);

	if(m_openrecord)
		net_opennet_alarm(net, ip, port, channel);

	TREC_CAMERA c;
	c.channel = channel; c.preset = 1;

	if(m_openptz)
	{
		c.cmd = camAuto; 
		set_net_opt(m_ipp, OPT_CAMERA, &c, NULL);
	}

	if(m_openlight)
	{
		c.cmd = camLight; 
		set_net_opt(m_ipp, OPT_CAMERA, &c, NULL);
	}

	if(output)
	{
		send_alarm_output(ip, port, output);
		oit outt = find_output_list(ip, port);
		if(outt)
		{
			outt->alarmtime = 0;
		}
		else
		{
			alarm_output outl;
			outl.ip = ip;
			outl.port = port;
			outl.alarmtime = 0;
			outlist.push_back(outl);
		}
	}
}

void CRightLogin::close_net_alarm(ULONG ip, USHORT port, int channel, int output )
{
	
	BOOL m_closechan = read_dword(rvNetAlarmsetup, rvNetAlarmclosechan);
	BOOL m_closelight = read_dword(rvNetAlarmsetup, rvNetAlarmcloselight);
	BOOL m_closeptz = TRUE;
	BOOL m_closerecord = TRUE;

	ip_port m_ipp(ip, port);
	video_channel* p = get_open_channel_window(m_ipp, channel);

	if(p && m_closechan)
		close_local_channel(p->index());

	if(m_closerecord)
		net_closenet_alarm(net, ip, port, channel);

	TREC_CAMERA c;
	c.channel = channel; c.preset = 1;

	if(m_closeptz)
	{
		c.cmd = camAuto1;
		set_net_opt(m_ipp, OPT_CAMERA, &c, NULL);
	}
	
	if(m_closelight)
	{
		c.cmd = camF11;
		set_net_opt(m_ipp, OPT_CAMERA, &c, NULL);
	}

}

MSG3(on_alarm_server, CRightLogin)
{
	ULONG pstid  = (ULONG) w;
	ULONG psgid  = (ULONG) l;

	ULONG ip; USHORT port; int channel, int output;
	
	vit pit = find_alarm_list(pstid, psgid);
	if(!pit)
	{
		alarm_id net_alarm;
		net_alarm.stationid = pstid;
		net_alarm.signalid = psgid;

		net_alarm.alarmtime = 0;
		id_list.push_back(net_alarm);
	}
	else
	{
		pit->alarmtime = 0;
	}

	if(find_station_channel(pstid, psgid, ip, port, channel, TRUE, output))
		open_net_alarm(ip, port, channel, output);

	return 0;
}

MSG3(get_zh_decstate, CRightLogin)
{
	ULONG ip = (ULONG) l;
	USHORT port = get_port(ip);

	ip_port ipport = ip_port(ip, port);
    CString m_dvrname = get_dvrname(ipport);

	CQueryDecState *p = CQueryDecState::the_one();
	p->SendMessage(NTM_ZH_DECSTATE_GET_OK, w, (DWORD)&m_dvrname);

	CString m_str;
	m_str.Format(IDS_GET_ZH_DECODE_OK);
	info_balloon(m_str);
	return TRUE;
}
bool get_station_state(CString m_station, int address)
{
	CRightLogin* l = CRightLogin::the_one();
	for( int i=0; i<l->cmgr.count(); i++ )
	{
	    channel_info& ref = l->cmgr[i];
		if(ref.get_dvrname() == m_station && ref.logintrue())
		{
            net_get_zh_decstate(l->net, ref.get_ip(), ref.look_port(), address);
			return true;
		}

	}
	return false;
}

void fill_combo(CComboBox* cbb)
{
	if( !cbb )
		return;

	cbb->ResetContent();
	CRightLogin* rlogin = CRightLogin::the_one();

	for( int i=0; i<rlogin->cmgr.count(); i++ )
	{
		if(rlogin->cmgr[i].logintrue())
		{
			CString m_str = rlogin->cmgr[i].get_dvrname();

			if(m_str == rlogin->m_tem_login_scene)
				cbb->AddString(rlogin->alias(rlogin->cmgr[i]));
			else
				cbb->AddString(rlogin->cmgr[i].get_dvrname());
		}
	}
}

void fill_combo_chnls(LPCTSTR alias, CComboBox* cbb)
{
	if( !cbb )
		return;

	cbb->ResetContent();
	int cnt = get_chnls(alias);
	if( !cnt )
		return;

	for( int i=0; i<cnt; i++ )
	{

⌨️ 快捷键说明

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