KBEngine源碼:EntityCall
阿新 • • 發佈:2018-09-03
方法 剛才 進行 服務 定義 檢查 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