美文网首页
GCMsgProcessor_ProcessNetMsg函数探

GCMsgProcessor_ProcessNetMsg函数探

作者: Sun被注册了 | 来源:发表于2015-12-23 11:29 被阅读0次

# GCMsgProcessor_ProcessNetMsg函数探秘

标签(空格分隔): C++ 服务器

---

### 简介

GCMsgProcessor_ProcessNetMsg是游戏服务器中网络守护进程,主要用来监听客户端发过来的序列消息(`protobuf`)。传入的参数为`zmq::message_t`类型的`*msg`。

### 执行流程图

```flow

st=>start: GCMsgProcessor_ProcessNetMsg(zmq::message_t *msg)

op0=>operation: return

op01=>operation: return

op02=>operation: return

op03=>operation: return

op04=>operation: return

op05=>operation: return

op06=>operation: return

op1=>operation: ProcessLocalOrder(msg)

op6=>operation: !ExtraNetMsgHeader(msg, &id, &groupID, &unitID, &data, &size)

op2=>operation: Event_ForbidMessage(groupID, unitID)

op3=>operation: player != NULL

op5=>operation: switch(groupID)

op4=>operation: PlayerEntity_AddMsgSt(player, groupID, unitID) > 0

op10=>operation: case NetProto_XXXX::GROUPID:

op100=>operation: switch(unitID)

op101=>operation: case NetProto_ClientException::UNITID:

op102=>operation: break

op11=>operation: break

op07=>operation: return

cond=>condition: true or false?

cond1=>condition: true or false?

cond2=>condition: true or false?

cond3=>condition: true or false?

cond4=>condition: true or false?

cond5=>condition: true or false?

cond6=>condition: true or false?

cond7=>condition: true or false?

e=>end

st->op1->cond

cond(yes)->op0

cond(no)->op6->cond2

cond2(yes)->op01

cond2(no)->op2->cond3

cond3(yes)->op02

cond3(no)->op3->cond4

cond4(yes)->op4->cond5

cond5(yes)->op03

cond4(no)->op5

cond5(no)->op5

op5->op10->cond6

cond6(yes)->op100->op101->cond7

cond6(no)->op10

cond7(yes)->op102->op11->op07->e

cond7(no)->op101

```

### 重要函数以及变量

```c++

//---------重要变量----------

/*

玩家id

*/

int32_t id = -1;

/*

功能序列的组ID和单元ID,

*/

u_int8_t groupID = 0, unitID = 0;

/*

data 为指向消息序列中数据的指针

*/

void *data = NULL;

/*

size 为消息序列的大小

*/

size_t size = 0;

//--------重要函数-------------

/*

PlayerEntity_Player()函数通过id找到玩家实体,并使player指针指向玩家实体

*/

PlayerEntity *player = PlayerEntity_Player(id);

/*

验证此消息是否是本地消息

*/

ProcessLocalOrder(msg)

/*

解析消息,然后给id、groupID、unitID、data赋值,成功则返回true,失败返回false

*/

ExtraNetMsgHeader(msg, &id, &groupID, &unitID, &data, &size)

/*

验证消息所请求的功能是否是被禁止的,禁止返回true,不禁止返回false

*/

Event_ForbidMessage(groupID, unitID)

/*

验证玩家实体和消息序列的ID

该函数定义在PlayerEntity.cc(137)

*/

PlayerEntity_AddMsgSt(player, groupID, unitID) > 0

```

相关文章

  • GCMsgProcessor_ProcessNetMsg函数探

    # GCMsgProcessor_ProcessNetMsg函数探秘 标签(空格分隔): C++ 服务器 --- ...

  • 再探JS函数

    函数是JS的核心概念,主要用来封装语句,需要注意一下 细碎的小点 return语句,一旦return,后续的语句不...

  • 再探Swift函数的派发方式

    Swift 的函数是怎么派发的呢? 我没能找到一个很简明扼要的答案, 但这里有四个选择具体派发方式的因素存在: 声...

  • 第九章函数的再探

    9.1 函数指针 函数的内存地址存储了函数的开始执行的位置,存储在函数指针中的内容就是这个地址。 9.1.1 声...

  • Python scapy网络包嗅探模块(转载)

    1.窃取Email认证1.1创建一个简单的嗅探器,捕获一个数据包,packet.show()函数解析了其中的协议信...

  • Java8 新特性之流式数据处理

    摘要: java8的流式处理极大了简化我们对于集合、数组等结构的操作,让我们可以以函数式的思想去操作,本篇文章将探...

  • 16期EXECL学习第十一天

    学习已经过半了。今天,开始学习函数。 学习心得: 1、不懂就要去探个究竟 今天在听课的过程中,发现有个按键,按照老...

  • 初探黄姚古镇之二

    前些天我写了《初探黄姚古镇》,其实初探也还没有探完,就是探完了也还有二探三探,一处美景总有探不完的精彩。所以今天我...

  • 探店探店✨

    生活虽然趋于平淡 但也要学会寻找平淡中的丝丝乐趣 探店打卡✨ 期待自己永远做个有趣的人❤️

  • 2023-02-15【105】抖音知识|如何填写探店需求

    填写探店需求的目的主要是让探店博主了解我们的知识,做出更符合探我们店更能形成的成果。 一般探店主要分为探店主题是什...

网友评论

      本文标题: GCMsgProcessor_ProcessNetMsg函数探

      本文链接:https://www.haomeiwen.com/subject/nqdfqttx.html