RakNet 消息、函数注册

#include <iostream>
#include <windows.h>
#include<string>
#include <map>


using namespace std;

enum GameMessage
{
	GM_LoginReturn,
	GM_EverydayDrawReturn,
	GM_FriendExtendReturn
};


void getRequestLoginReturn()
{
	int i=0;
}

void getRequestEverydayDrawReturn()
{
	int j=0;
}

void getFriendExtendOpenReturn()
{
	int k=0;
}

typedef void(*funct)();  //函数类型,代表返回值为空,参数为空的函数指针类型
map<unsigned long,funct> m_msgMap;
typedef map<unsigned long,funct> MSGMAP;


void registerMessageHandle(unsigned long type,funct f);
void fireMessage(unsigned long type);

int main()
{
	registerMessageHandle(GM_LoginReturn,&getRequestLoginReturn);
	registerMessageHandle(GM_EverydayDrawReturn,&getRequestEverydayDrawReturn);
	registerMessageHandle(GM_FriendExtendReturn,&getFriendExtendOpenReturn);

	cout<<"注册了 "<<m_msgMap.size()<<"  条消息"<<endl;

	int msgCin;

	while(1)
	{
		cout<<"输入事件ID:";
		cin>>msgCin;

		fireMessage(msgCin);

		Sleep(10);
	}

	return 0;
}

void registerMessageHandle(unsigned long type,funct f)
{
	m_msgMap.insert(pair<unsigned long,funct>(type,f));
}

void fireMessage(unsigned long type)
{
	MSGMAP::iterator typeIter=m_msgMap.find(type);
	if (typeIter==m_msgMap.end()) return;

	//如果找到了这个注册消息,那么就执行这个消息对应的函数,因为一个消息可以对应多个函数,用vector把所有的函数存储,然后循环执行
	//funct Func= typeIter->second;
	//Func();
	(typeIter->second)();
}


当收到server端发给Client的消息,就会执行对应消息的函数。效果和Switch Case 是一样的。只不过这样看起来更舒服。


输入消息ID模拟Server端给Client发消息ID

Sleep 模拟游戏的刷帧



你可能感兴趣的:(C++,函数指针,RakNet)