經過前面的學習,我們已經知道了kbe一個大概了,這節我們趁熱打鐵來了解下dbmgr程序,為什麼說這個程序呢?我覺得dbmgr的關聯性比較強,主要是處理資料的部分,在開發中多數情況下是離不開這個部分的,我們說下這個程序的主要邏輯以便于以後的程序中可以和這塊穿起來,可以發現在loginapp中我們分析了建立賬号的過程,資料的來源互動就是在這裡,我們了解了這部分,有利于我們後面的學習。
廢話不多說現在我們就來看看這個程序了吧;
首先我們來看他的主邏輯,當然這邊看過之後發現很熟悉,對的,大部分都是差不多的,我們挑着不同的部分來講;
SERVER_APP app(dispatcher, networkInterface, componentType, g_componentID);
首先我們來看上面的代碼,這個地方就是我們熟悉的app初始化了,我們來看看dbmgr的構造函數幹了什麼,跟進去看了一下其實就是協定頭的初始化了,之前分析過,沒什麼好說的。
下面看下bool Dbmgr::initializeBegin(),我們知道這個是在serverapp的initialize裡面調用的,進去看了下其實就是設定了一份id
id的配置如下
<!-- entityID配置設定器,進入溢出範圍則請求擷取新的ID資源
(The entityID allocator, enter the overflow area will get the new ID's)
-->
<ids>
<increasing_range> 2000 </increasing_range> <!-- Type: Integer -->
</ids>
在下面我們看
bool Dbmgr::inInitialize()
同樣這個也是在serverapp的initialize裡面調用的,進去看下發現,其實是做了2件事,1,加載腳本的子產品,這個是loginapp也做的,我們了解過了,還有一個就是
EntityDef::initialize(scriptBaseTypes, componentType_))
這裡看到這個其實是對entity的加載了,看着我們在腳本中定義各種entity,各種屬性,哎呀,原來就是在這裡加載的啊,這裡加載完儲存在EntityDef::__scriptModules.這個裡面,具體儲存在裡面的什麼參數思維導圖都有講述了,這裡就不做過多贅述了,大家看思維導圖吧。
下面看下
Dbmgr::initializeEnd()這個方法;
1.PythonApp::initializeEnd();
這個地方開啟了一個定時器,分析過了。
2.
// 添加一個timer, 每秒檢查一些狀态
loopCheckTimerHandle_ = this->dispatcher().addTimer(1000000, this,
reinterpret_cast<void *>(TIMEOUT_CHECK_STATUS));
mainProcessTimer_ = this->dispatcher().addTimer(1000000 / 50, this,
reinterpret_cast<void *>(TIMEOUT_TICK));
這個地方又是兩個定時器。
3.PyObject* pyResult = PyObject_CallMethod(getEntryScript().get(),
const_cast<char*>("onDBMgrReady"),
const_cast<char*>(""));
這個地方通知腳本;
4.initInterfacesHandler()
這個是注冊一個app到本app;
5.initDB();
這個地方就是資料庫表的處理了,包括建立表,檢查entity的資料表等;
思維導圖位址:思維導圖位址:連結:https://pan.baidu.com/s/14PF6Bh5-Ia5qkAwF7m_hcg
提取碼:6sgj
複制這段内容後打開百度網盤手機App,操作更友善哦