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

📄 rightlogin.cpp

📁 实时监控
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	}

	if(m_dvrname == m_tem_login_scene)
		update_list(); 
	else
		OnSelchangeScene();
	CString m_str;
    m_str.Format(IDS_LOGIN_LOGGED_IN, m_dvrname, m_ip);
    write_log_file(m_str);
	info_balloon(m_str);

	// 检查命令行参数自动打开端口
	//SetTimer(clo->ip, 1, NULL) ;
	return 0 ;
}

MSG3(kill_window_timer, CRightLogin)
{
	int window = (int)w;
    KillTimer(window+BASE_WINDOW_ID);
	return 0;
}
MSG3(get_disk_info_ok, CRightLogin)
{
   AfxGetMainWnd()->PostMessage(WM_GETDISKINFO,w,0);
   return 0;
}
//站点连接超时
MSG3(on_disconnect, CRightLogin)
{
	ULONG ip= (ULONG)w;
    USHORT port = (USHORT)l;
	extern bool m_all_mute;

	for( int k=0; k<video_channel_count(); k++ )
    {
	  video_channel* p = get_video_channel(k);
	  if(p->is_video_opened() && ip == p->channel_ip().get_ip() && port == p->channel_ip().look_port() )
	  {
		 if(m_close_remote_bool)
	       close_remote_channel(k);
		 else
		   close_local_channel(k);
	  }
	}

	
	for(int i=0;i<cmgr.count();i++)
	{
	    channel_info& ref = cmgr[i];
	
        if(ip == ref.get_ip() && port == ref.look_port())
		{
		  CString m_str;
		  channel_info ci(ref.get_dvrname(),ip, port, 0 ,0 ,0,-1);
		  
		  m_str.Format(IDS_DISCONNECT,ref.get_dvrname() ,ref.str_ip());
		  info_balloon(m_str);
		  if(!m_all_mute)
			  Beep(5000, 1000);
		  write_log_file(m_str);

		  cmgr.remove(ref);
		  cmgr.add(ci);
		  break;
		}
	}
	OnSelchangeScene();
	return 0 ;
}

void CRightLogin::onwindowpoll(int window)
{
    video_channel* p= get_video_channel(window);
    
    if(p->is_video_opened())
	{
	    if(m_close_remote_bool)
            close_remote_channel(window);
        else 
			close_local_channel(window);
	}
    Machine_Channel_Setting* pp = &m_window_poll[window][m_temnubpoll[window]]; 
	if(pp->port)
	{
	  ip_port m_ipptrans(pp->ip,pp->port);
	  open_channelvideo(m_ipptrans,pp->channel,pp->window,pp->nettype);
	}
}
void * CRightLogin::check_open_vedio( )
{
	for(int m=m_open_vedio_nub;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))
	   {
		   m_open_vedio_nub = m;
		   ULONG ip = net_get_host_by_name(net, p->ip);
		   if(!ip)
			continue ;

		   ip_port m_ipptrans(ip,p->port);
		   channel_info* ref = cmgr.find(m_ipptrans);
		   if(!ref) 	continue;
	       if(!ref->logintrue()) continue;
		   if(p->connect)
		   {
			   return p; 
		   }
		}
	 }
	return NULL;
}
void CRightLogin::close_channel_window(int window)
{
	video_channel* p = get_video_channel(window);
	ULONG ip = p->channel_ip().get_ip();
	USHORT port = p->channel_ip().look_port();

	if(p->is_vod())
	{
		on_close_vod(p);
		return;
	}

	stop_talk(p);
	//KillTimer(p->index()+BASE_WINDOW_ID);

	PostMessage(NTM_CMD_CHANNEL_CLOSED, ip, MAKEDWORD(port, p->channel_index()));
	p->SendMessage(NTM_CMD_CHANNEL_CLOSED, ip, MAKEDWORD(port, p->channel_index()));
}
void CRightLogin::close_local_channel(int window)
{
	close_channel_window(window);
	net_close_local_channel(net, window);
}
void CRightLogin::close_remote_channel(int window)
{
	close_channel_window(window);
	net_close_remote_channel(net, window); 
}
void * CRightLogin::check_login( )
{
	 for(int m=m_login_nub;m<m_station_length;m++)
	{
	   m_login_nub = m;
	   if(!strcmp(m_station[m].name,m_login_client_name)) 
		   return &m_station[m]; 
	}
	return NULL;
}

void CRightLogin::OnTimer(UINT nIDEvent) 
{
	if( nIDEvent == ID_LOGIN )
	{
        Remote_Station_setting *p = (Remote_Station_setting *) check_login();
		if(p!=NULL) 
		{
			ip_port m_ipp(p->ip, p->port);
			login(m_ipp, p->dvrname, p->logindvrname, p->logindvrpass,false);
		    m_login_nub++;
		}
		else KillTimer(nIDEvent);
	}
	if(nIDEvent==ID_OPENVEDIO)
	{
		Machine_Channel_Setting* p= (Machine_Channel_Setting* )check_open_vedio();
		if(p!=NULL)
		{
          ip_port m_ipp(p->ip,p->port);
          open_channelvideo(m_ipp,p->channel,p->window,p->nettype);
		  m_open_vedio_nub++;
		}
		else KillTimer(nIDEvent);
	}
	if(nIDEvent >= BASE_WINDOW_ID && nIDEvent < BASE_WINDOW_ID+MAX_VOD_WINDOWS)
	{
		if(m_auto_poll)
		{
			KillTimer(nIDEvent);
		}
		else
		{
			int window=nIDEvent-BASE_WINDOW_ID;
			m_temnubpoll[window]++;
			if(!m_window_poll[window][m_temnubpoll[window]].port) 
				m_temnubpoll[window]=0;
			onwindowpoll(window);
		}
	}
	if(nIDEvent == ALARM_OPENVIDEO)
	{
        open_alarm_channelctl();
		if(m_alarm_cyc_nub == MAXALARMWINDOWNUB || m_channel[m_alarm_cyc_nub] == -2)
		{
			KillTimer(nIDEvent);
			m_alarm_video_lock = true;
		}
		m_alarm_cyc_nub++;
	}

	if(nIDEvent == ALARM_NET_SERVER)
	{
		int	m_time = read_dword(rvNetAlarmsetup, rvNetAlarmtime);

		for(vit pit = id_list.begin(); pit != id_list.end(); pit++)
		{
			if(!pit)	continue;
			pit->alarmtime++;

			if(pit->alarmtime > m_time)
			{
				ULONG ip; USHORT port; int channel, int output;
				if(find_station_channel(pit->stationid, pit->signalid, ip, port, channel, FALSE, output))
					close_net_alarm(ip, port, channel, output);
				id_list.erase(pit);
				pit--;
			}

		}

		for(oit ppit = outlist.begin(); ppit != outlist.end(); ppit++)
		{
			if(!ppit)	continue;
			ppit->alarmtime++;

			if(ppit->alarmtime > m_time)
			{
				BOOL m_closelight = read_dword(rvNetAlarmsetup, rvNetAlarmcloselight);
				if(m_closelight)
					send_alarm_output(ppit->ip, ppit->port, 0);
				outlist.erase(ppit);
				ppit--;
			}

		}
	}

	baseclass::OnTimer(nIDEvent);
}

/*
 *	来自主机网络消息: 视频通道关闭成功
 *	附带信息: IP, Port, 关闭成功的视频通道号(主机端)
 */

MSG3(on_req_failure, CRightLogin)
{
	ULONG ip = w;
	USHORT port = HSHORT(l);
	SHORT channel = LSHORT(l);
	CString m_str;
	m_str.Format(IDS_REQUEST_FAILURE);
	info_balloon(m_str);
	channel_info* ref = cmgr.find(ip_port(ip, port));
	if(!ref)
		return 0;
	ref->close(channel);

	return 0;
}

//void CRightLogin::on_channel_closed(IPPORT_TYPE, ULONG channel)
MSG3(on_channel_closed, CRightLogin)
{
	ULONG ip = w;
	USHORT port = HSHORT(l);
	SHORT channel = LSHORT(l);

	channel_info* ref = cmgr.find(ip_port(ip, port));
	if( !ref )
		return 0;
	ref->close(channel);

	CString m_str;
	m_str.Format(IDS_CLOSE_REAL_CHANNEL_RECOIRD,ref->str_ip(),channel+1);
    write_log_file(m_str);

	return 0;
}


/*
 *	来自主机网络消息: 视频通道关闭成功
 *	附带信息: IP, Port, 成功打开的视频通道号(主机端)
 */
//void CRightLogin::on_channel_opened(IPPORT_TYPE, ULONG mip, USHORT mport, ULONG channel)
MSG3(on_channel_opened, CRightLogin)
{
	ULONG ip = w;
	USHORT port = HSHORT(l);
	SHORT channel = LSHORT(l);
	
	video_channel* p;
	ip_port ipp = ip_port(ip,port);
	channel_info* ci = cmgr.find(ipp);
	if( !ci ) return 0;

	p = get_open_channel_window(ipp, channel);
	if(p == NULL)  return 0;
	ci->open(channel, p);
	//通道打开, 该通知刚才申请打开通道的视频窗口了
	p->PostMessage(NTM_CMD_CHANNEL_OPENED, w, l);

	PostMessage(WM_VIDEO_WND_INVOKED, (WPARAM)p, WM_LBUTTONDOWN);
	 
	CString m_str;
	m_str.Format(IDS_OPEN_REAL_CHANNEL_RECOIRD,ci->str_ip(),channel+1);
    write_log_file(m_str);

	return 0;
}

/*
 *	打开IP别名对话框
 */
//##ModelId=3F90BAB2016A

bool create_bat()
{
	FILE* fp = fopen(_T("ping.bat"), _T("wb"));
	if( !fp )
		return false;

	fprintf(fp, _T("@echo off\r\n"));
	fprintf(fp, _T("ping.exe %%1\r\n"));
	fprintf(fp, _T("echo.\r\n"));
	fprintf(fp, _T("pause\r\n"));

	fclose(fp);
	return true;
}

void CRightLogin::OnDbClkLogin(CString m_ip)
{
    if( !create_bat() )
		ShellExecute(m_hWnd, _T("Open"), _T("ping.exe"), m_ip, NULL, SW_SHOW);
	else
		ShellExecute(m_hWnd, _T("Open"), _T("ping.bat"), m_ip, NULL, SW_SHOW);
}

//检查报警的ip是否登陆
bool CRightLogin::checkloginip(ULONG ip, USHORT port)
{
	ip_port m_ipp(ip,port);
	channel_info* ref = cmgr.find(m_ipp);
	if(ref!=NULL) return true;
	else return false;
}
/*
 *	拦截ListBox的鼠标点击消息
 */
//##ModelId=3F90BAB10336
BOOL CRightLogin::PreTranslateMessage(MSG* pMsg)
{
	if( pMsg->message == WM_KEYDOWN )
	{
		if( ::GetDlgCtrlID(pMsg->hwnd) == IDC_LOG_IN_USER ||
			::GetDlgCtrlID(pMsg->hwnd) == IDC_LOG_IN_PASS )
		{
			if( pMsg->wParam == VK_RETURN )
			{
				OnLogintemp();
				return TRUE;
			}
		}
	}
	if( pMsg->message == WM_LBUTTONUP &&
		pMsg->hwnd == m_lstLogged.m_hWnd )
	{	
		UpdateData(FALSE);
	}
	bool right = false;
	if( pMsg->hwnd == m_lstLogged.m_hWnd )
	{
		if( pMsg->message == WM_RBUTTONDOWN )
		{
			pMsg->message = WM_LBUTTONDOWN;
			right = true;
		}
	}
	if( pMsg->hwnd == m_tem_ctl_login.m_hWnd &&
		pMsg->message == WM_LBUTTONDBLCLK )
	{
		UpdateData(true);
		ip_port ipp = ipmgr.trans_ip(m_login_temip);
		OnDbClkLogin(ipp.str_ip());
		return TRUE;
	}

	BOOL res = baseclass::PreTranslateMessage(pMsg);
	if( right )
	{
		OnRightClickList();
	}
	return res;
}


/*
 *	鼠标右键点击登录项的处理(弹出菜单)
 */
//##ModelId=3F90BAB1037C
void CRightLogin::OnRightClickList()
{
    popup_menu pm;

	int indx = m_lstLogged.GetCurSel();
	if( indx == -1 )
		return;
	
	int m_length=3;
    int m_int = find_position();

	channel_info& ref = cmgr[m_int];
	PRIVILEGE p = net_get_privilege(net, ref.get_ip(), ref.look_port());
	if(p >= privNEWVERSION)
	{
		if(ref.get_udp())
			m_length = 6;
		else
			m_length = 5;
	}

	int m_channels_count = ref.get_channels();
	for( int i=0; i<m_channels_count+m_length; i++ )
	{
		CString str;
		if(i < m_channels_count)
		{
		   str.Format(IDS_CHNL_FMT, i+1);
		   pm.add_item(str, i+1);
		
	 	   if( ref.is_opened(i) || check_open_channel_window_all(ref.get_ip_port(), i))
			  pm.select_item(i);
		}
		else
		{
		 if(i== m_channels_count)
			str.Format(IDS_CHNL_ALL);
		 if(i== 1+m_channels_count)
            str.Format("-----");
		 if(i== 2+m_channels_count)
            str.Format("ping");
		 if(i== 3+m_channels_count)
            str.Format(IDS_LOGIN_AGAIN);
		 if(i== 4+m_channels_count)
            str.Format(IDS_SHOW_POPEDOM);
		 if(i== 5+m_channels_count)
			 str = "UDP";
		 pm.add_item(str, i+1);
		 if(ref.get_opened_type())
			pm.select_item(5+m_channels_count);
		}
	}
	if(m_openping[indx])
	{
		pm.select_item(2+m_channels_count);
		m_loginagain[indx]=false;
		m_opensetbool[indx]=false;
		m_showpopedom[indx]=false;
	}
	if(m_loginagain[indx])
	{
		pm.select_item(3+m_channels_count);
		m_opensetbool[indx]=false;
		m_openping[indx]=false;
		m_showpopedom[indx]=false;
	}
	if(m_showpopedom[indx])
	{
        pm.select_item(4+m_channels_count);
		m_loginagain[indx]=false;
		m_openping[indx]=false;
	    m_opensetbool[indx]=false;
	}

	UINT sel = pm.popup(this);
	if( sel == 0 )
		return;
	list_operation(m_channels_count , sel-1);
}
int CRightLogin::find_position()
{
  int idx = m_lstLogged.GetCurSel();
  if( idx == -1 ) return -1;
  
  for( int i=0; i<cmgr.count(); i++ )
  {
	channel_info& ref = cmgr[i];
	if(m_scene != m_tem_login_scene)
	{
	   if(ref.get_dvrname()==m_temstation[idx])
		    return i;
	}
	else
	{
	   if(idx >= 0)
	   {
          if(/*ref.get_dvrname() == m_tem_login_scene && */ref.logintrue()) 
			  idx--;
	   }
	   if(idx < 0) return i;
	 }
  }
  return -1;
}
void CRightLogin::list_operation(int m_channels_count, int m_item)
{
	int idx = m_lstLogged.GetCurSel();
	int m_int = find_position();
	if(m_int<0) return;

	channel_info& ref = cmgr[m_int];
	if(m_item < m_channels_count)
	{
		open_channel(ref, m_item,-1);
		return;
	}
	if(m_item == m_channels_count)
	{
		for(int i=0;i<m_channels_count;i++)
		{
			open_channel(ref, i,-1);
			Sleep(50);
		}
		return;
	}
  	if(m_item == 2+m_channels_count )
	{
		m_openping[idx]=true;
		m_opensetbool[idx]=false;
	    m_loginagain[idx]=false;
		m_showpopedom[idx]=false;
		OnDblclkList();
		return;
	}
	if(m_item == 3+m_channels_count )
	{
		m_loginagain[idx]=true;
		m_opensetbool[idx]=false;
		m_openping[idx]=false;
		m_showpopedom[idx]=false;
	     
   	    channel_info& ref = cmgr[m_int];
        for(int i=0;i<m_station_length;i++) 
		{
		  Remote_Station_setting *p = &m_station[i];
	      if(strcmp(p->name,m_login_client_name)) continue;

	      if(!strcmp(ref.get_dvrname(), p->dvrname)) 
		  {	 

⌨️ 快捷键说明

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