#include<iostream>
using namespace std;
enum Protocol
{
login2,
enterbattle
};
//首先声明一个枚举类型作为协议定义,枚举值为0即为login2表示传输的是登陆信息,枚举值为1即为enterbattle表示传输的是进入战斗信息
struct _LOGIN
{
enum Protocol protocol;
char account[10];
char password[10];
};
//然后是协议的结构体定义,所有的协议结构体定义的第一个数据类型都是协议枚举,表示传递的是什么信息,后面的是这个信息附带的数据,
//这里是一个登录信息的结构体,后面附有登录账号和登录密码信息。
void LOGIN(void *msg)
{
struct _LOGIN* login1=(_LOGIN*)msg;
cout<<"login"<<endl<<login1->account<<endl<<login1->password<<endl;
}
//然后这里是一个处理登录信息的函数,函数参数为空类型指针,用于传递各种类型的指针(感觉这里也可以用_LOGIN结构体类型的指针,
//因为这就是一个处理登录信息的函数,传递的实参肯定是_LOGIN结构体类型的指针)
//这里先声明一个登录结构体的指针,然后将空类型的参数强制类型转换成登录结构体类型的指针,再赋值给声明的结构体指针
//然后通过结构指针用->访问传递的信息
void (*act[2]) (void *msg);
//这里是声明的一个函数指针数组,这个函数指针的数组的用处就在于当传递的信息不同时,调用不同的函数处理这个信息,
//函数数组的大小就是需要处理的不同类型的信息的个数,也就是可能需要调用的处理信息的函数的个数,
//函数参数为空类型指针用于传递各种类型的指针
//协议枚举的值即对应着函数指针数组中的值,
int main()
{
struct _LOGIN login;
login.protocol=login2;
cin>>login.account>>login.password;
act[0]=LOGIN;
act[login.protocol]((void*)&login);
return 0;
}
游戏协议
最新推荐文章于 2024-07-11 17:36:21 发布