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

📄 net_cmd.h

📁 实时监控
💻 H
字号:
#ifndef _CMD_H
#define _CMD_H

#include "../notif/notif_net.h"
#include "../notif/notif_cmd.h"
#include "../notif/notif_av.h"
#include "net_bk.h"
#include "net.h"
#include "net_udp.h"
#include "list"
#include "timer.h"
#include "vector"
#include "alarm server.h"

#define   MAX_BACKUP_THREAD_NUM     50
#define   MAX_TALKING_THREAD_NUM     50

// 类超前声明
class net_av;

#define IPPORT ULONG rip, USHORT rport

/*
 *	网络命令功能, 登录, 退出, 打开视频通道, 关闭通道...
 */

/*
 *	权限.
 *	1 = User
 *	2 = Admin
 */
//##ModelId=3F9A1D2202BF
class server
{
protected:
	//##ModelId=3F9A1D2202C0
	ULONG _ip;
	//##ModelId=3F9A1D2202C9
	USHORT _port;
public:
	TREC_ALARMINFO  alarm_info ;

public:
	//##ModelId=3F9A1D2202E7
	server(): _ip(0), _port(0) {}
	server(ULONG i, USHORT p): _ip(i), _port(p){}
	//##ModelId=3F9A1D2202F1
	//##ModelId=3F9A1D2202FC
	server(const server& p) {*this = p;}
	ULONG get_ip() {return _ip;}
	USHORT get_port() {return _port;}
  
	//##ModelId=3F9A1D220306
	server& operator=(const server& p)
	{
		_ip = p._ip;
		_port = p._port;
        alarm_info=p.alarm_info;
		return *this;
	}
	//##ModelId=3F9A1D220325
	ULONG ip() const {return _ip;}
	//##ModelId=3F9A1D22032E
	USHORT port() const {return _port;}
	//##ModelId=3F9A1D220330
	friend bool operator==(const server& p1, const server& p2);
};

class privilege: public server
{
	PRIVILEGE priv;
public:
	privilege(): priv(privNONE) {};
	privilege(ULONG i, USHORT p, PRIVILEGE _priv): server(i, p), priv(_priv)
	{
	}
	//##ModelId=3F9A1D220310
	PRIVILEGE get_priv() const {return priv;}
	//##ModelId=3F9A1D22031A
	void set_priv(PRIVILEGE p) {priv = p;}

	//##ModelId=3F9A1D22031C
	bool is_admin() const
	{
		return get_priv() == privADMIN;
	}
	//##ModelId=3F9A1D220306
	privilege& operator=(const privilege& p)
	{
		_ip = p._ip;
		_port = p._port;
		alarm_info=p.alarm_info;
		priv = p.priv;
		return *this;
	}

	friend bool operator==(const privilege& p1, const privilege& p2);

};

inline bool operator==(const server& p1, const server& p2)
{
	return (p1._ip == p2._ip) &&
		(p1._port == p2._port);
}

inline bool operator==(const privilege& p1, const privilege& p2)
{
	return ((const server&)p1 == (const server&)p2);
}

//##ModelId=3F9A1D220342
typedef std::list<server> server_list;
typedef std::list<privilege> priv_list;
typedef server_list::iterator sit;
typedef priv_list::iterator pit;

//////////////////////////////////////////////////////////////////////////

//##ModelId=3F9A1D230004
class net_cmd: public net_udp
{
	net_alarmserver * palarmserver;

	server_list request_list;
	//##ModelId=3F9A1D230019
	priv_list connected;				// 权限表
	enum 
	{
		max_channel=256, 
	};

//	timer	dec_timer;
	//##ModelId=3F9A1D23002D
	net_av* av[max_channel];
	
	//##ModelId=3F9A1D230036
	ULONG last_ip;
	//##ModelId=3F9A1D230040
	USHORT last_port;

	UINT   udp_bitrate;

    //USHORT last_mport;
	//##ModelId=3F9A1D23004A
	int last_group;

	//##ModelId=3F9A1D23005F
	CMD_CALLEE cmdcb;
	
	//##ModelId=3F9A1D230073
	OPT_GET_CALLEE gc;
	//##ModelId=3F9A1D230087
	OPT_SET_CALLEE sc;

	/// VOD
	//##ModelId=3F9A1D2300A4
	int vod_group;
	
	/// Backup
	BACKUP_CALLEE bkcb ;
	///@{
	ULONG      bk_ip[MAX_BACKUP_THREAD_NUM] ;
	ULONG      bk_port[MAX_BACKUP_THREAD_NUM] ;
	UCHAR      timeout[MAX_BACKUP_THREAD_NUM] ;
	net_bk     *pBackupTh[MAX_BACKUP_THREAD_NUM] ;
	///@}

	//Talking
	BACKUP_CALLEE talkcb ;
    ULONG      talk_ip[MAX_TALKING_THREAD_NUM] ;
	ULONG      talk_port[MAX_TALKING_THREAD_NUM] ;
	UCHAR      talk_timeout[MAX_TALKING_THREAD_NUM] ;
	int        talk_channel[MAX_TALKING_THREAD_NUM];
	net_bk     *ptalkTh[MAX_TALKING_THREAD_NUM] ;

	// 收到原始数据
	//##ModelId=3F9A1D2300F4
	virtual void on_net_udp_recv(byte* buf, int length, net_addr* from);
	
	friend void CALLBACK request_decode(UINT uTimerID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2);
	//##ModelId=3F9A1D24004C
	friend void CALLBACK shake_hand(UINT uTimerID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2);
	//##ModelId=3F9A1D24007D
	friend void CALLBACK request_vod_frame(UINT uTimerID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2);

	friend void CALLBACK request_vod_frame_ntsc(UINT uTimerID, UINT uMsg, DWORD dwUser, DWORD dw1, DWORD dw2);

    void  check_connect_timeout();

	void send_keep_port();
	//##ModelId=3F9A1D230112
	void send_cmd(IPPORT, char cmd, const char* data, int datalen);

	void send_cmd_data(ULONG ip, USHORT port, char cmd, const char* data, int datalen, int group);
	//##ModelId=3F9A1D23013A
	void request_vod_frame(ULONG ip,USHORT port, USHORT mport, LONG speed,int group);
	//##ModelId=3F9A1D23014E
	void close_vod();

	void close_vod(int group);
	
	//##ModelId=3F9A1D230180
	bool is_admin(ULONG ip, ULONG port);
	//##ModelId=3F9A1D23019E
	void add_priv(ULONG ip, ULONG port, PRIVILEGE priv);
	//##ModelId=3F9A1D2301BC
	void remove_priv(ULONG ip, ULONG port);
	
	//##ModelId=3F9A1D2301DC
	timer timer_shake_hand;

	timer timer_vod_ctl_pal;

	timer timer_vod_ctl_ntsc;

	//timer connect_timeout;
	//##ModelId=3F9A1D2301E5
	void shake_hand();
	//##ModelId=3F9A1D2301F9
	void process_alarm(net_addr* from, byte* data);

	void process_disconnect(ULONG ip, USHORT port);

	void disconnect_timeout(ULONG ip, USHORT port);

	//void create_new_bind_socket(ULONG ip, USHORT port, ULONG mip, int group, int channel);

	ULONG send_open_channel(IPPORT);

	ULONG operation_btye(int m);

	USHORT m_vod_mport;

	USHORT m_real_mport;


	
public:
	//##ModelId=3F9A1D230203
	net_cmd();
	//##ModelId=3F9A1D230217
	virtual ~net_cmd();
	
	UINT get_bitrate(int group);
	UINT udp_get_bitrate();
	//##ModelId=3F9A1D230221
	BOOL create(IPPORT, CMD_CALLEE cb);

	static net_cmd * m_netcmdp;

	friend class CSoundin;

	//##ModelId=3F9A1D23023F
	virtual void destroy();

	HWND get_cmdhwnd() { return cmdcb; }

	/// 登录
	//##ModelId=3F9A1D230249
	BOOL login(IPPORT, LPCTSTR user, LPCTSTR password);

	/// 登出
	//##ModelId=3F9A1D230267
	BOOL logout(IPPORT, BOOL close_remote);

//	/// 加入视频多播组
//	BOOL join_channel(IPPORT, LONG channel);

//	BOOL leave_channel(LONG group);

	/// 打开主机视频通道
	//##ModelId=3F9A1D230285
	BOOL open_remote_channel(IPPORT, 
		LONG channel_idx, 
		LONG group, 
		VIDEO_CALLEE cb);

	/// 关闭主机视频通道
	//##ModelId=3F9A1D2302AD
	BOOL close_remote_channel(LONG group);
	
	// 退出视频多播组
	//##ModelId=3F9A1D2302C1
	BOOL close_local_channel(LONG group);

	//##ModelId=3F9A1D2302D5
	void update_window(int group);

	//##ModelId=3F9A1D2302DF
	void set_option(IPPORT, NET_OPTIONS no, void* stuff, OPT_SET_CALLEE cb);
	//##ModelId=3F9A1D230307
	void get_option(IPPORT, NET_OPTIONS no, int channel, OPT_GET_CALLEE cb);

	void get_options_file(IPPORT, byte * m_byte, OPT_GET_CALLEE cb);

	void get_options_backup_file(IPPORT, byte * m_byte, OPT_GET_CALLEE cb);

	//##ModelId=3F9A1D23032F
	void switch_audio(int group);
	//##ModelId=3F9A1D230339
	void mute(BOOL mute);
	//##ModelId=3F9A1D23034D
	int get_audio_group();

	void clear_alarm(ULONG ip, USHORT port);
	
	//##ModelId=3F9A1D23034E
	VOD_SPEED get_vod_speed(ULONG ip,int group);
	//##ModelId=3F9A1D230357
	void request_vod(ULONG rip, LONG rport, 
		const TREC_FILETIME* ft, 
		VOD_CMD cmd, 
		int group,
		VIDEO_CALLEE cb);
	
	//##ModelId=3F9A1D23037F
	BOOL is_voding(int group);

	void initi_login_if(IPPORT, LPCTSTR user);

	int get_login_version(IPPORT);

	//##ModelId=3F9A1D230393
	void start_local_record(int group, TCHAR drive);
	//##ModelId=3F9A1D2303A7
	void stop_local_record(int group);
	//##ModelId=3F9A1D2303BB
	void get_local_record(int group, TCHAR* drive);

	bool check_vod_send_cmd(LONG speed, int time_nub);

	void start_backup(IPPORT, TREC_BACKUPTIME* opt, BACKUP_CALLEE cb) ;

	void stop_backup(ULONG rip, USHORT rport) ;

	void clear_backup(ULONG rip, USHORT rport) ;

	void check_backup() ;

	void start_talk(IPPORT,int channel, BACKUP_CALLEE cb) ;

	void stop_talk(ULONG rip, USHORT rport) ;

	void clear_talk(ULONG rip, USHORT rport) ;

	void check_talk() ;

	//##ModelId=3F9A1D240006
	bool snapshot(int group, LPCTSTR bmpfile);

	//##ModelId=3F9A1D24001A
	void set_video_renderer(COLOR_SPACE cs, BOOL video_mem);

	void get_disk_info(ULONG rip, ULONG rport);

	//##ModelId=3F9A1D240037
	PRIVILEGE get_privilege(ULONG ip, USHORT port);

	//##ModelId=3F9A1D24004B
	BOOL is_muted();

	void post_alarm_message(ULONG ip, USHORT m_new, USHORT m_type);

	void send_bind_cmd(USHORT oldport, USHORT newport, BOOL image_type);

	void get_zh_decstate(ULONG ip, USHORT port, int address);

	ULONG get_host_by_name(LPCTSTR m_name);

	BOOL set_cb_showhandle(int group, VIDEO_CALLEE cb);

	BOOL set_callbackfn(int group, PCALLBACKSTREAMPROD p, DWORD d1, DWORD d2);

	BOOL set_decodedcallbackfn(int group, PCALLBACKDECODEDSTREAMPROD p, DWORD d1, DWORD d2);

	BOOL setdrawaddimagecallback(int group, pDraw_Add_Image pimage, DWORD d1, DWORD d2);

	BOOL open_alarm_server(USHORT bindport);

	BOOL close_alarm_server();

	BOOL set_update_statue(ULONG ip, USHORT port);

	BOOL set_netclub_info(ULONG ip, USHORT port, void * buf, int len);

	BOOL set_dvrrestart(ULONG ip, USHORT port);

	BOOL sendcardid(ULONG ip, USHORT port, void * buf);

	BOOL opennet_alarm(ULONG ip, USHORT port, int channel);

	BOOL closenet_alarm(ULONG ip, USHORT port, int channel);

	BOOL openalarm_output(ULONG ip, USHORT port, int output);

	BOOL is_opened(int group);
};

class ip_speed
{
public:
  ULONG ip;
  USHORT port;
  LONG speed;
  int group;
  USHORT mport;
  ip_speed()
  {
	  ip = 0;
	  port = 0;
	  speed = 0;
	  group = -1;
	  mport = 0;
  }
};
class login_version
{
public:
  ULONG ip;
  USHORT port;
  int connecttime;
  int version;
};

#undef IPPORT
#endif	// _CMD_H

⌨️ 快捷键说明

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