📄 rightlogin.cpp
字号:
}
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 + -