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 物件