1. 程式人生 > >KBEngine源碼:EntityCall

KBEngine源碼:EntityCall

方法 剛才 進行 服務 定義 檢查 rouge 調用 一次

在之前的章節中一直提到EntityCall,那什麽是EntityCall?我們可以簡單的理解為:封裝遠程交互、通訊等方法的一種對象,是腳本層與實體遠程交互的常規手段。

EntityCall的底層實現原理:

EntityCall對象在C++底層實現非常簡單,它只包含了實體的ID、目的地的地址、實體類型、EntityCall類型。

當用戶請求一次遠程交互時,底層首先能夠通過實體類型找到實體定義的描述(def配置文件),通過該描述對用戶輸入的數據進行檢查,如果檢查合法那麽底層將數據打包並發往目的地,接著目的地進程根據協議進行解包,根據實體ID找到實體,最終調用到腳本層。

EntityCall的限制或要求:

剛才在底層實現原理中提到,必須先通過實體類型找到實體定義的描述,而這個描述即是def配置文件!相當於互相之間的遠程通訊都通過def“協議”規定好的。所以EntityCall只能:

1:調用其對應def配置文件中聲明過的方法;
2:def配置中的屬性不可被訪問;
3:在def定義之外的任何信息都不可被訪問。

一個實體包含哪些EntityCall?

一個實體最多可以包含三個部分:

1.client:

當實體包含客戶端部分時(通常為玩家),在服務器端可以訪問實體的client屬性,該屬性是一個EntityCall。

2.base:

當實體的一部分創建在Baseapp(如Baseapp A)時,在非當前Baseapp(如Baseapp B、Cellapp C等)中可以訪問實體的base屬性,該屬性是一個EntityCall。

2.cell:

當實體的一部分創建在Cellapp(如Cellapp A)時,在非當前Cellapp(如Cellapp B、Baseapp C等)中可以訪問實體的cell屬性,該屬性是一個EntityCall。

KBEngine源碼:EntityCall