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