📄 protocol.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 + -