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

📄 protocol.h

📁 视频监控vc源代码.对于做视频系统的朋友们很有帮助
💻 H
字号:
#pragma once

#ifdef _NEW_PROTOCOL_

#ifndef _PROTOCOL_H_
#define _PROTOCOL_H_

#include <process.h>
#include <winsock2.h>
#include <string.h>
#include <wincon.h>
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <time.h>
#include <iostream>
#include <string>
#include <hash_map>
#include <list>

using namespace std;

#if _MSC_VER > 1300
using namespace stdext;
#endif

const unsigned int LOGIN_SERVER = 1000;//登陆服务器的ID
const unsigned int MEETING_SERVER_FIRST = 1001;//会议服务器起始ID
const unsigned int MEETING_SERVER_LAST = 1050;//会议服务器结束ID

//端口定义
const unsigned int LS_OUT_PORT = 2000;//登陆服务器bind的端口
const unsigned int LS_IN_PORT  = 2001;
const unsigned int MS_OUT_PORT = 2002;//会议服务器bind的端口
const unsigned int MS_IN_PORT  = 2003;

//定义消息结构
const unsigned int MEETING_MSG_ID = 1;
const unsigned int LOGIN_MSG_ID = 2;
const unsigned int GENERAL_MSG_ID = 3;
const unsigned int SHUTDOWN_MSG_ID = 1804;

struct msg{
	unsigned int type;
	size_t length;
	char buf[8120];
};

//SLoginMsg结构
const unsigned int MAX_NAME = 32;//最大的用户名长度
const unsigned int MAX_PWD = 32;//最大的密码长度
const unsigned int CLIENT_ALIVE_INTER = 50000;//客户端用来判断是否掉线的线程,发送间隔,单位毫秒
const unsigned int SERVER_ALIVE_INTER = 50000;//服务器同上
const unsigned int MAX_INTER = 3*60;//单位秒,用来判断是否掉线
const unsigned int ADDON_DATA = 400;
const unsigned int USER_INFO = 1000;

struct SLoginMsg{
	unsigned int wType;
	unsigned long dwUserID;
	unsigned long dwPassUserID;
	time_t time;
	char userPWD[MAX_PWD];
	SOCKET addr_a;
	DWORD addr_b;
	char userinfo[USER_INFO];
	int addon;
	char addondata[ADDON_DATA];
};

struct SUserInfo{	
	unsigned long nID;			// 用户ID *		
	char  cStatus;				// 状态 '0' 不在线  '1' 在线 *	
	char cName[30];				// 用户名
	char cPWD[16];				// 用户密码
	char cSex;					// 性别
	char cEMail[28];			// EMail
	char cPhone[16];			// 电话
	char cMPhone[16];			// 移动电话
	unsigned short nCountry;	// 国家
	char cArea[50];				// 地址
	unsigned short nPic;		// 头像索引
	char cComment[256];			// 注释
};

struct SChannel{
	unsigned int uiType;//信道类型
	SOCKET addr_a;
	DWORD addr_b;
};

#ifdef _LOGIN_SERVER_

//定义信道类型
const unsigned int CHANNEL_NUMBER = 1;  //信道数目,本身就是信道的下标
const unsigned int BASE_CHANNEL = 0;  //基础信道

struct SOnlineUser{
	SOnlineUser(){
		channel[BASE_CHANNEL].uiType = 0;
		channel[BASE_CHANNEL].addr_a = 0;
		channel[BASE_CHANNEL].addr_b = 0;
	}
	SOnlineUser(const SLoginMsg &msg){
		time(&lasttime);
		dwUserID = msg.dwUserID;
		memset(channel,0,sizeof(channel));
		channel[BASE_CHANNEL].uiType = 0;
		channel[BASE_CHANNEL].addr_a = msg.addr_a;
		channel[BASE_CHANNEL].addr_b = msg.addr_b;
		hasAV = msg.addon;
		memcpy(addondata,msg.addondata,ADDON_DATA);
	}
	SChannel channel[CHANNEL_NUMBER];
	time_t lasttime;
	unsigned long dwUserID;
	int hasAV;
	SUserInfo userinfo;
	char addondata[ADDON_DATA];
};

#elif defined _MEETING_SERVER_

//定义信道类型
const unsigned int CHANNEL_NUMBER = 2;  //信道数目,本身就是信道的下标
const unsigned int BASE_CHANNEL = 0;  //基础信道
const unsigned int VIDEO_CHANNEL = 1;  //视频信道

struct SOnlineUser{
	unsigned long dwUserID;
	SChannel channel[CHANNEL_NUMBER];
	time_t lasttime;
};

#elif defined _CLIENT_

//定义信道类型
const unsigned int CHANNEL_NUMBER = 3;  //信道数目,本身就是信道的下标
const unsigned int LOGIN_CHANNEL = 0; //登陆信道
const unsigned int MEETING_CHANNEL = 1; //会议信道
const unsigned int VIDEO_CHANNEL = 2;  //视频信道

#endif

const unsigned int GENERAL_MSG_DATA_LENGTH = 2000;//临时
const unsigned int GENERAL_MSG_HEAD_LEN = 40;
struct SGeneralMsg{
	unsigned type; //消息类型
	unsigned sender; //消息起始发出者
	unsigned recver; //消息接收者
	time_t time; //消息时间戳
	unsigned addon[5]; //消息附加信息,随消息不同,而具有不同意义
	size_t data_len;
	char data[GENERAL_MSG_DATA_LENGTH];
};

const unsigned int MAX_DATA_LENGTH = 8000;
const unsigned int MAX_MEETING_NAME_LENGTH = 32;
const unsigned int MAX_MEETING_PWD_LENGTH = 32;
const unsigned int MAX_MEETING_DISCRIPTION_LENGTH = 400;
const unsigned int MAX_MEETING_INFO_LENGTH = MAX_MEETING_NAME_LENGTH + MAX_MEETING_PWD_LENGTH + MAX_MEETING_DISCRIPTION_LENGTH;
const unsigned int MAX_MEETING_USER = 50;//一个会议里面最多的用户数
const unsigned int MEETING_SERVER_CHECKTIME = 10*1000;
const unsigned int MAX_MEETING_CLOSE_TIME = 20*60;//秒
const unsigned int MEETING_ADDON_DATA = 800;
const unsigned int MAXPAGESIZE = 200;//SDataList里面的一个包最多传多少用户ID

//会议指令或数据的结构
struct SMeetingMsg{
	unsigned int wType;//消息类型
	unsigned long dwUserID;//消息发出者
	unsigned long dwMeetingID;//消息所属的会议,可选
	unsigned long dwPassUserID;//消息用于被作用的人,可选
	time_t time;
	unsigned int wDataType;//附加数据类型,可选
	size_t wDataLength;//附加数据长度,可选
	char data[MAX_DATA_LENGTH];//附加数据,可选
};
struct addr_info{
	unsigned long local_ip;
	unsigned long local_port;
	unsigned long remote_ip;
	unsigned long remote_port;
};
struct SMeetingInfo{
	unsigned long ID;
	unsigned long CreatorID;
	time_t CreateTime;
	unsigned long number;//会议人数
	unsigned long FixSrc;//固定转发源,和SUser里面的fixsrc重复
	addr_info ip;
	char name[MAX_MEETING_NAME_LENGTH];
	char passwd[MAX_MEETING_PWD_LENGTH];
	char discription[MAX_MEETING_DISCRIPTION_LENGTH];
	char addondata[MEETING_ADDON_DATA];
};

const unsigned int DATA_HEAD_LENGTH = sizeof(SMeetingMsg) - MAX_DATA_LENGTH;

struct SUser{
	unsigned long dwUserID;	//用户ID
//	unsigned long requested;//有多少人请求这个用户的信息
	unsigned admin : 1;//表明用户是不是超级用户
	unsigned hashideright : 1;//有没有隐身权
	unsigned hide : 1;//表明是不是处于隐身状态
	unsigned fixsrc : 1;//是不是默认源,如果是,就一定会转发他的数据
	unsigned shielded : 1;//是不是屏蔽了,如果是,就不转发他的数据
};

struct SRouter{
	unsigned long dwAskerID;//请求信息的人
	unsigned long dwSource;//发出信息的人
	unsigned int wType;//信息类型
};

//在返回用户列表或者会议列表的时候使用
struct SDataList{
	size_t page;
	size_t page_total;
	size_t page_size;
	unsigned long data[MAXPAGESIZE];
};

const unsigned int TRAFFICJAM_BEGIN = 1;
const unsigned int TRAFFICJAM_SERIOUS = 5;

const unsigned int CLASSIFIEDDATA = 100;//分发信息
const unsigned int FIXSRCMSG = 101;//由指定的固定源发出的分发信息
const unsigned int VIDEO = 2;//视频信息
const unsigned int AUDIO = 3;//音频信息
const unsigned int TEXT = 1;//文字信息

enum _MSG_TYPES{MMSG_TEXT=1,MMSG_VIDEO,MMSG_VOICE,MMSG_FILE_DATA,MMSG_EBOARD};

const unsigned int CREATEMEETING = 1001;//创建会议
const unsigned int CREATEMEETINGSUCCEED = 1002;//创建会议成功
const unsigned int CREATEMEETINGFAIL = 1003;//创建会议失败
const unsigned int REMOVEMEETING = 1004;//删除会议
const unsigned int REMOVEMEETINGSUCCEED = 1005;//删除会议成功
const unsigned int REMOVEMEETINGFAIL = 1006;//删除会议失败
const unsigned int REQUESTCLASSIFIEDDATA = 1007;//请求某类信息
const unsigned int UNREQUESTCLASSIFIEDDATA = 1008;//取消请求某类信息
const unsigned int REQUESTCLASSIFIEDDATASUCCEED = 1009;//请求某类信息成功
const unsigned int REQUESTCLASSIFIEDDATAFAIL = 1010;//请求某类信息失败
const unsigned int UNREQUESTCLASSIFIEDDATASUCCEED = 1011;//取消请求某类信息成功
const unsigned int UNREQUESTCLASSIFIEDDATAFAIL = 1012;//取消请求某类信息失败
const unsigned int JOINMEETING = 1013;//加入会议
const unsigned int LEAVEMEETING = 1014;//离开会议
const unsigned int JOINMEETINGSUCCEED = 1015;//加入会议成功
const unsigned int LEAVEMEETINGSUCCEED = 1016;//离开会议成功
const unsigned int JOINMEETINGFAIL = 1017;//加入会议失败
const unsigned int LEAVEMEETINGFAIL = 1018;//离开会议失败
const unsigned int REQUESTMEETINGLIST = 1019;//请求会议列表
const unsigned int MEETINGLIST = 1020;//会议列表
const unsigned int REQUESTUSERLIST = 1021;//请求用户列表指令
const unsigned int USERLIST = 1022;//用户列表
const unsigned int SETMEETINGPWD = 1023;//设定会议密码
const unsigned int SETMEETINGNAME = 1024;//设定会议名
const unsigned int SETMEETINGDISCRIPTION = 1025;//设定会议描述
const unsigned int SETMEETINGPWDSUCCEED = 1026;//设定会议密码成功
const unsigned int SETMEETINGNAMESUCCEED = 1027;//设定会议名成功
const unsigned int SETMEETINGDISCRIPTIONSUCCEED = 1028;//设定会议描述成功
const unsigned int SETMEETINGPWDFAIL = 1029;//设定会议密码失败
const unsigned int SETMEETINGNAMEFAIL = 1030;//设定会议名失败
const unsigned int SETMEETINGDISCRIPTIONFAIL = 1031;//设定会议描述失败
const unsigned int GETMEETINGINFO = 1032;//请求会议信息
const unsigned int MEETINGINFO = 1033;//会议信息
const unsigned int SETADMIN = 1034;//设定管理员
const unsigned int SETFIXSRC = 1035;//设定固定转发源
const unsigned int SETSHIELDED = 1036;//设定过滤源
const unsigned int SETADMINSUCCEED = 1037;//设定管理员成功
const unsigned int SETFIXSRCSUCCEED = 1038;//设定固定转发源成功
const unsigned int SETSHIELDEDSUCCEED = 1039;//设定过滤源成功
const unsigned int SETADMINFAIL = 1040;//设定管理员失败
const unsigned int SETFIXSRCFAIL = 1041;//设定固定转发源失败
const unsigned int SETSHIELDEDFAIL = 1042;//设定过滤源失败
const unsigned int KICKUSER = 1043;//踢人
const unsigned int KICKUSERSUCCEED = 1044;//踢人成功
const unsigned int KICKUSERFAIL = 1045;//踢人失败
const unsigned int ADDFIXMSGTYPE = 1046;//添加固定转发信息
const unsigned int DELFIXMSGTYPE = 1047;//删除固定转发信息
const unsigned int ADDFIXMSGTYPESUCCEED = 1048;//添加固定转发信息成功
const unsigned int DELFIXMSGTYPESUCCEED = 1049;//删除固定转发信息成功
const unsigned int ADDFIXMSGTYPEFAIL = 1050;//添加固定转发信息失败
const unsigned int DELFIXMSGTYPEFAIL = 1051;//删除固定转发信息失败
const unsigned int PTOPMSG = 1052;//点对点消息
const unsigned int LOST = 1053;//掉线
const unsigned int REQUESTADMINLIST = 1054;//请求超级用户列表
const unsigned int ADMINLIST = 1055;//超级用户列表
const unsigned int HASREQUEST = 1056;//还有人请求这个人的消息
const unsigned int NOMOREREQUEST = 1057;//没有人请求这个人的消息
const unsigned int TRAFFICJAM = 1058;//某个人交通堵塞

const unsigned int NOTIFY = 1059;//给某个人通知
const unsigned int NOTIFYALL = 1060;//给所有人通知

const unsigned int TRAFFICJAMOK = 1061;//某人交通OK,重新给他发主视频

const unsigned int ALIVE = 1999;
const unsigned int LOGIN = 2000;
const unsigned int LOGINSUCCEED = 2001;
const unsigned int LOGINFAIL = 2002;
const unsigned int GETUSERINFO = 2003;
const unsigned int USERINFO = 2004;
const unsigned int LOGOUT = 2005;
const unsigned int LOGOUTSUCCEED = 2006;
const unsigned int LOGOUTFAIL = 2007;
const unsigned int LOGINPTOPMSG = 2008;
const unsigned int QUERYUSER = 2009;
const unsigned int GETUSERONLINE = 2010;
const unsigned int ALLUSERLIST = 2011;
const unsigned int UPDATEUSERINFO = 2012;
const unsigned int UPDATEUSERINFOSUCCEED = 2013;
const unsigned int UPDATEUSERINFOFAIL = 2014;

const unsigned int OPEN_MEETING_CHANNEL = 2015;//打开会议信道
const unsigned int CLOSE_MEETING_CHANNEL = 2016;
const unsigned int OPEN_VIDEO_CHANNEL = 2017;//打开视屏信道
const unsigned int CLOSE_VIDEO_CHANNEL = 2018;
const unsigned int OPEN_MEETING_CHANNEL_SUCCEED = 2019;
const unsigned int CLOSE_MEETING_CHANNEL_SUCCEED = 2020;
const unsigned int OPEN_VIDEO_CHANNEL_FAIL = 2021;
const unsigned int CLOSE_VIDEO_CHANNEL_FAIL = 2022;

const unsigned int REGISTER_MEETING_SERVER = 2500;
const unsigned int UNREGISTER_MEETING_SERVER = 2501;
const unsigned int REGISTER_MEETING = 2502;
const unsigned int UNREGISTER_MEETING = 2503;

const char SPT = '\n';//分隔符

void printgeneralmsg(SGeneralMsg *msg,int i);
void printloginmsg(SLoginMsg *msg,int i);
void printmeetingmsg(SMeetingMsg *msg,int i);

#endif //_PROTOCOL_H_

#endif //_NEW_PROTOCOL_

⌨️ 快捷键说明

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