BlitzMax/模块/网络/GameNet
GameNet模块(简称GNet)提供了一组用于创建和管理多人网络游戏的命令。
GNet的工作方式与其他网络库略有不同。GNet不是主要基于“消息”,而是通过在网络上同步GNet对象的集合来工作的。
每个GNet对象包含32个&插槽,其性质类似于BlitzMax对象的字段。您可以使用SetGNetInt、SetGNetFloat和SetGNetString命令写入这些插槽,并使用GetGNetInt、GetGNetFloat和GetGNetString命令读取这些插槽。这些插槽中包含的数据的实际含义完全由您决定,但通常包括诸如玩家位置、得分、生命值等信息。
请注意,您只能修改自己创建的GNet对象。此类对象称为本地对象,而其他地方创建的对象称为远程对象。
要开始使用GNet,您必须首先使用CreateGNetHost命令创建一个GNet主机。创建主机后,您可以使用GNetConnect连接到其他GNet主机,或使用GNetListen准备接受来自其他主机的连接。
GNetSync命令使所有GNet对象保持最新状态。这包括通知其他主机您对本地GNet对象所做的任何修改,以及处理来自其他主机关于远程GNet对象任何修改的通知。
在GNetSync之后,您可以使用GnetObjects命令检查哪些对象已被修改、创建或关闭。这将返回一个处于特定状态的GNet对象的链接列表。
GNet还提供了一个简单的消息系统。GNet消息实际上只是一种特殊的GNet对象,因此您可以使用标准的GNet命令来写入插槽以初始化消息。创建并初始化后,可以使用SendGNetMessage命令将消息发送到远程对象。
在GNetSync之后,可以使用GNetMessages命令处理传入的消息。此函数返回一个消息对象的链接列表,可以使用标准的GNet命令读取插槽来检查这些对象。此外,可以使用GNetMessageObject命令确定消息的目标本地对象。
函数 CreateGNetHost:TGNetHost()
描述:创建GNet主机
返回值:一个新的GNet主机
信息:创建GNet主机后,可以使用它通过CreateGNetObject创建对象,通过GNetConnect连接到其他主机,并通过GNetListen侦听来自其他主机的连接。
函数 CloseGNetHost( host:TGNetHost )
描述:关闭GNet主机
信息:关闭后,无法重新打开GNet主机。
函数 GNetSync( host:TGNetHost )
描述:同步GNet主机
信息:GNetSync将更新所有GNet对象的状态。使用此命令后,使用GNetObjects函数确定哪些对象已远程创建、修改或关闭。
函数 GNetListen( host:TGNetHost,port )
描述:侦听连接
返回值:如果成功,则返回True,否则返回false
信息:使主机开始侦听指定端口上的连接尝试。主机开始侦听后,其他机器上的主机可以使用GNetConnect连接。
GNetListen可能会失败,如果端口已被其他应用程序使用,或者主机已经在侦听或已使用GNetConnect连接到远程主机。
函数 GNetConnect( host:TGNetHost,address$,port,timeout_ms=10000 )
描述:连接到远程GNet主机
返回值:如果连接成功,则返回True,否则返回false
信息:尝试将主机连接到指定的远程地址和端口。
指定的地址和端口必须有一个GNet主机在侦听(参见GNetListen),连接才能成功。
函数 GNetObjects:TList( host:TGNetHost,state=GNET_ALL )
描述:获取GNet对象的列表
返回值:一个链接列表
信息:GNetObjects返回处于特定状态的GNet对象的列表。
state参数控制列出哪些对象,可以是&GNET_ALL、&GNET_CREATED、&GNET_MODIFIED或&GNET_CLOSED之一。
请注意,除了&GNET_ALL之外,返回的列表将始终仅包含远程对象。
函数 GNetMessages:TList( host:TGNetHost )
描述:获取发送到本地对象的GNet消息列表
返回值:一个链接列表
函数 CreateGNetObject:TGNetObject( host:TGNetHost )
描述:创建一个GNet对象
返回值:一个新的GNet对象
函数 CreateGNetMessage:TGNetObject( host:TGNetHost )
描述:创建一个GNet消息对象
返回值:一个新的GNet对象
Function SendGNetMessage( msg:TGNetObject,toObject:TGNetObject )
描述: 向远程对象发送 GNet 消息
Function GNetMessageObject:TGNetObject( msg:TGNetObject )
描述: 获取消息目标对象
返回值: msg 发送到的对象
Function GNetObjectState( obj:TGNetObject )
描述: 获取 GNet 对象的状态
返回值: 一个整数状态
信息: 返回值可以是以下之一
对象状态 | 含义 |
---|---|
GNET_CREATED | 对象已创建 |
GNET_SYNCED | 对象已同步 |
GNET_MODIFIED | 对象已被修改 |
GNET_CLOSED | 对象已被关闭 |
GNET_ZOMBIE | 对象是僵尸对象 |
GNET_MESSAGE | 对象是消息对象 |
僵尸对象是指已成功关闭并且 GameNet 将不再使用的对象。因此,此类对象将永远不会出现在 GNetObjects 函数返回的任何列表中。
Function GNetObjectLocal( obj:TGNetObject )
描述: 判断 GNet 对象是否为本地对象
返回值: 如果对象是本地对象则返回 True
Function GNetObjectRemote( obj:TGNetObject )
描述: 判断 GNet 对象是否为远程对象
返回值: 如果对象是远程对象则返回 True
Function SetGNetInt( obj:TGNetObject,index,value )
描述: 设置 GNet 对象的整数数据
Function SetGNetFloat( obj:TGNetObject,index,value# )
描述: 设置 GNet 对象的浮点数数据
Function SetGNetString( obj:TGNetObject,index,value$ )
描述: 设置 GNet 对象的字符串数据
Function GetGNetInt( obj:TGNetObject,index )
描述: 获取 GNet 对象的整数数据
Function GetGNetFloat#( obj:TGNetObject,index )
描述: 获取 GNet 对象的浮点数数据
Function GetGNetString$( obj:TGNetObject,index )
描述: 获取 GNet 对象的字符串数据
Function SetGNetTarget( obj:TGNetObject,target:Object )
描述: 设置 GNet 对象的目标对象
信息: 此命令允许您将任意对象绑定到 GNet 对象。
Function GetGNetTarget:Object( obj:TGNetObject )
描述: 获取 GNet 对象的目标对象
返回值: 当前绑定的目标对象
Function CloseGNetObject( obj:TGNetObject )
描述: 关闭 GNet 对象