Quake源代碼分析(草稿).4

转载 2006年05月18日 14:30:00

Quake網絡部分總結:
(1) 網絡部分被分為接收和傳送兩個部分.
(2) 傳送部份被分為本地數據包傳輸和異地數據包傳輸兩個部分.
(3) 本地封包傳輸由NET_SendLoopbackPacket()負責.
(4) 異地封包傳輸由Sys_SendPacket()負責.
(5) 數據包傳輸又可以分為單包傳輸和多包傳輸.
(6) NET_SendPacket()可以傳送本地或異地不超過一個封包大小的數據包.也就是單包傳輸.
(7) Netchan_Transmit()
   根據數據包的大小選擇傳輸方式,如果數據包大於一個封包的尺寸,
那麼就調用Netchan_TransmitNextFragment()函數,
将需要传送的数据块(MAX_MSGLEN)切割成若干等大小(MAX_PACKETLEN - 100)的封包,然後再啟動NET_SendPacket()傳送.
否則如果數據包小於一個封包的尺寸,那麼就直接調用NET_SendPacket()傳送.
上述数据包被NET_SendPacket()傳送前都会先被Netchan_ScramblePacket()进行加密(搅乱里面的数据),然后再用CL_Netchan_Encode()给它们编码.
這就是多包傳輸.
  從上面的說明能夠看出其實多包傳輸最終還是要轉變為單包傳輸.
(8)  數據包接收也分為本地數據包接收和異地數據包接收.
(9)  本地數據包接收: NET_GetLoopbackPacket()
(10)  異地數據包接收: Sys_GetPacket()
(11)  當系統接收到異地數據包時會觸發SE_PACKET事件,這個事件到達Com_EventLoop()時,啟動CL_PacketEvent()處理客戶端傳送過來的數據包,
啟動SV_PacketEvent()處理服務器端傳送過來的數據包.
CL_PacketEvent()CL_Netchan_Process()Netchan_Process()
SV_PacketEvent()SV_Netchan_Process()Netchan_Process()
對於那些多包的數據,交由CL_Netchan_Process()或SV_Netchan_Process()來處理,它會一直等到全部封包都接收下來後再調用
Netchan_UnScramblePacket()解密,接著用CL_Netchan_Decode()解码.最後用戶就可以讀到完整的數據包了.
(12) 當系統接收到本地數據包時就直接啟動
CL_PacketEvent()或SV_PacketEvent()
而且不需要等待封包.因為這些封包沒有進入網絡,所以
while( NET_GetLoopbackPacket( NS_CLIENT, &adr, &msg ) )
while( NET_GetLoopbackPacket( NS_SERVER, &adr, &msg ) )
上面的循環可以把全部被切割的封包一次性全部讀出.
(13)
        利用NET_SendPacket()
直接傳送數據的函數有NET_OutOfBandPrint()NET_SendPacket()
註:用NET_OutOfBandPrint()传送出来的数据包,前四个字节一定是FFFFFFFF,即-1.
它們会被SV_ConnectionlessPacket()和CL_ConnectionlessPacket()處理.

相关文章推荐

从Quake 3源代码分析AI Bot库

从Quake 3源代码分析AI Bot库 2008年1月14日,Alex J. Champandard 查看已发布的标题的AI源代码是从渠道中学习技巧的好方法。这个新专栏可以帮助您...

QUAKE 3源代码审查:人工智能

QUAKE 3源代码审查:人工智能(第5部分,共5部分)>> 改装社区为每个以前的idTech引擎写了机器人系统。其中两人当时颇有名气: Quake1有Omicron。Quake2有角斗士...

QUAKE 3源代码评测:架构

QUAKE 3源代码评测:架构(第1部分,共5部分)>> 由于我在下一个合同前一个星期,我决定完成我的“循环ID”。后末日,末日iPhone,Quake1,Quake2中,德军iPhone和毁灭...

QUAKE 3源代码审查:虚拟机

QUAKE 3源代码审查:虚拟机(第4部分,共5部分)>> 如果以前的引擎仅将游戏委托给虚拟机,idtech3会严重依赖它们进行基本任务。除其他事项外: Rendition由Client ...

quake3源代码整体印象及基于其的开源引擎项目

总体而言 , quake 系列引擎的整体架构非常漂亮 , 是学习的好材料 。 并且从 quake1 到 quake3, 整体逻辑端代码变化不大 , 真正比较有突破性的是渲染引擎。 . 本人在学习 qu...

QUAKE 3源代码审查:渲染器

QUAKE 3源代码评论:RENDERER(第2部分,共5部分)>> Quake III渲染器是Quake II硬件加速渲染器的演变:经典部分是建立在“二进制分区”/“潜在可见集”架构上,但...

QUAKE系列引擎以及基于QUAKE扩展引擎的源代码分析

前言:一:研究quake系列引擎断断续续也已经两年有余了,一直想写点什么,但是真的到了那一步,又发现其实很难下笔,原因有三:1 文笔不流畅,特别是技术性技巧的缺乏,概念难以精确定义,无法想内心的真实表...

从Wolf3D到Quake4:3D游戏引擎进化史

在阅读各种游戏介绍的时候我们常常会碰见“引擎”(Engine)这个单词,引擎在游戏中究竟起着什么样的作用?它的进化对于游戏的发展产生了哪些影响?希望下面这篇文章能为大家释疑。   一、什么是引擎   ...

Quake4的gui

原文地址https://www.iddevnet.com/quake4/GUIEditor Quake4的gui跟doom3的关卡编辑器基本上一模一样,我觉得 反正都是doom3的引擎代码,挖过来...

Quake4裁剪关卡

原文地址https://www.iddevnet.com/quake4/GUIEditor 原地址需要翻墙才能进入,强烈建议对于quake4,doom3地图制作以及引擎代码研究的人,快速访问这个网站...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)