跳转到内容

BlitzMax/模块/网络/GameNet

来自Wikibooks,开放世界中的开放书籍

GameNet模块(简称GNet)提供了一组用于创建和管理多人网络游戏的命令。

GNet的工作方式与其他网络库略有不同。GNet不是主要基于“消息”,而是通过在网络上同步GNet对象的集合来工作的。

每个GNet对象包含32个&插槽,其性质类似于BlitzMax对象的字段。您可以使用SetGNetIntSetGNetFloatSetGNetString命令写入这些插槽,并使用GetGNetIntGetGNetFloatGetGNetString命令读取这些插槽。这些插槽中包含的数据的实际含义完全由您决定,但通常包括诸如玩家位置、得分、生命值等信息。

请注意,您只能修改自己创建的GNet对象。此类对象称为本地对象,而其他地方创建的对象称为远程对象。

要开始使用GNet,您必须首先使用CreateGNetHost命令创建一个GNet主机。创建主机后,您可以使用GNetConnect连接到其他GNet主机,或使用GNetListen准备接受来自其他主机的连接。

GNetSync命令使所有GNet对象保持最新状态。这包括通知其他主机您对本地GNet对象所做的任何修改,以及处理来自其他主机关于远程GNet对象任何修改的通知。

GNetSync之后,您可以使用GnetObjects命令检查哪些对象已被修改、创建或关闭。这将返回一个处于特定状态的GNet对象的链接列表。

GNet还提供了一个简单的消息系统。GNet消息实际上只是一种特殊的GNet对象,因此您可以使用标准的GNet命令来写入插槽以初始化消息。创建并初始化后,可以使用SendGNetMessage命令将消息发送到远程对象。

GNetSync之后,可以使用GNetMessages命令处理传入的消息。此函数返回一个消息对象的链接列表,可以使用标准的GNet命令读取插槽来检查这些对象。此外,可以使用GNetMessageObject命令确定消息的目标本地对象。

CreateGNetHost

[编辑 | 编辑源代码]

函数 CreateGNetHost:TGNetHost()

描述:创建GNet主机

返回值:一个新的GNet主机

信息:创建GNet主机后,可以使用它通过CreateGNetObject创建对象,通过GNetConnect连接到其他主机,并通过GNetListen侦听来自其他主机的连接。

CloseGNetHost

[编辑 | 编辑源代码]

函数 CloseGNetHost( host:TGNetHost )

描述:关闭GNet主机

信息:关闭后,无法重新打开GNet主机。

函数 GNetSync( host:TGNetHost )

描述:同步GNet主机

信息GNetSync将更新所有GNet对象的状态。使用此命令后,使用GNetObjects函数确定哪些对象已远程创建、修改或关闭。

GNetListen

[编辑 | 编辑源代码]

函数 GNetListen( host:TGNetHost,port )

描述:侦听连接

返回值:如果成功,则返回True,否则返回false

信息:使主机开始侦听指定端口上的连接尝试。主机开始侦听后,其他机器上的主机可以使用GNetConnect连接。

GNetListen可能会失败,如果端口已被其他应用程序使用,或者主机已经在侦听或已使用GNetConnect连接到远程主机。

GNetConnect

[编辑 | 编辑源代码]

函数 GNetConnect( host:TGNetHost,address$,port,timeout_ms=10000 )

描述:连接到远程GNet主机

返回值:如果连接成功,则返回True,否则返回false

信息:尝试将主机连接到指定的远程地址和端口。

指定的地址和端口必须有一个GNet主机在侦听(参见GNetListen),连接才能成功。

GNetObjects

[编辑 | 编辑源代码]

函数 GNetObjects:TList( host:TGNetHost,state=GNET_ALL )

描述:获取GNet对象的列表

返回值:一个链接列表

信息GNetObjects返回处于特定状态的GNet对象的列表。

state参数控制列出哪些对象,可以是&GNET_ALL、&GNET_CREATED、&GNET_MODIFIED或&GNET_CLOSED之一。

请注意,除了&GNET_ALL之外,返回的列表将始终仅包含远程对象。

GNetMessages

[编辑 | 编辑源代码]

函数 GNetMessages:TList( host:TGNetHost )

描述:获取发送到本地对象的GNet消息列表

返回值:一个链接列表

CreateGNetObject

[编辑 | 编辑源代码]

函数 CreateGNetObject:TGNetObject( host:TGNetHost )

描述:创建一个GNet对象

返回值:一个新的GNet对象

CreateGNetMessage

[编辑 | 编辑源代码]

函数 CreateGNetMessage:TGNetObject( host:TGNetHost )

描述:创建一个GNet消息对象

返回值:一个新的GNet对象

SendGNetMessage

[编辑 | 编辑源代码]

Function SendGNetMessage( msg:TGNetObject,toObject:TGNetObject )

描述: 向远程对象发送 GNet 消息

GNetMessageObject

[编辑 | 编辑源代码]

Function GNetMessageObject:TGNetObject( msg:TGNetObject )

描述: 获取消息目标对象

返回值: msg 发送到的对象

GNetObjectState

[编辑 | 编辑源代码]

Function GNetObjectState( obj:TGNetObject )

描述: 获取 GNet 对象的状态

返回值: 一个整数状态

信息: 返回值可以是以下之一

对象状态含义
GNET_CREATED对象已创建
GNET_SYNCED对象已同步
GNET_MODIFIED对象已被修改
GNET_CLOSED对象已被关闭
GNET_ZOMBIE对象是僵尸对象
GNET_MESSAGE对象是消息对象

僵尸对象是指已成功关闭并且 GameNet 将不再使用的对象。因此,此类对象将永远不会出现在 GNetObjects 函数返回的任何列表中。

GNetObjectLocal

[编辑 | 编辑源代码]

Function GNetObjectLocal( obj:TGNetObject )

描述: 判断 GNet 对象是否为本地对象

返回值: 如果对象是本地对象则返回 True

GNetObjectRemote

[编辑 | 编辑源代码]

Function GNetObjectRemote( obj:TGNetObject )

描述: 判断 GNet 对象是否为远程对象

返回值: 如果对象是远程对象则返回 True

SetGNetInt

[编辑 | 编辑源代码]

Function SetGNetInt( obj:TGNetObject,index,value )

描述: 设置 GNet 对象的整数数据

SetGNetFloat

[编辑 | 编辑源代码]

Function SetGNetFloat( obj:TGNetObject,index,value# )

描述: 设置 GNet 对象的浮点数数据

SetGNetString

[编辑 | 编辑源代码]

Function SetGNetString( obj:TGNetObject,index,value$ )

描述: 设置 GNet 对象的字符串数据

GetGNetInt

[编辑 | 编辑源代码]

Function GetGNetInt( obj:TGNetObject,index )

描述: 获取 GNet 对象的整数数据

GetGNetFloat

[编辑 | 编辑源代码]

Function GetGNetFloat#( obj:TGNetObject,index )

描述: 获取 GNet 对象的浮点数数据

GetGNetString

[编辑 | 编辑源代码]

Function GetGNetString$( obj:TGNetObject,index )

描述: 获取 GNet 对象的字符串数据

SetGNetTarget

[编辑 | 编辑源代码]

Function SetGNetTarget( obj:TGNetObject,target:Object )

描述: 设置 GNet 对象的目标对象

信息: 此命令允许您将任意对象绑定到 GNet 对象。

GetGNetTarget

[编辑 | 编辑源代码]

Function GetGNetTarget:Object( obj:TGNetObject )

描述: 获取 GNet 对象的目标对象

返回值: 当前绑定的目标对象

CloseGNetObject

[编辑 | 编辑源代码]

Function CloseGNetObject( obj:TGNetObject )

描述: 关闭 GNet 对象

华夏公益教科书