上篇文章以文件分類簡單的介紹了eos代碼的架構(gòu)壁酬,由于eosiod在整個(gè)工程中是較為重要的同木,接下來的例子中我們將以eosiod為主線進(jìn)行相關(guān)內(nèi)容的分析和探討,今天我們主要看一下eosiod的初始化相關(guān)內(nèi)容汞舱。
在所有的初始化之前,eosiod首先會(huì)進(jìn)行版本的設(shè)置团南,通過下面一行代碼即可實(shí)現(xiàn):
app().set_version(eosio::eosiod::config::version);
在版本設(shè)置完成之后開始進(jìn)行eosiod的初始化,如下:
if(!app().initialize<chain_plugin, http_plugin, net_plugin>(argc, argv))
? ? ? ? ?return -1;
通過逐步跳轉(zhuǎn)炼彪,我們來到appbase中的:
bool application::initialize_impl(int argc, char** argv, vector<abstract_plugin*> autostart_plugins)
在initialize_impl開始會(huì)首先執(zhí)行set_program_options()吐根,即構(gòu)建選項(xiàng)器。
在這里我們要簡單的介紹下program options辐马,program options是一系列pair<name,value>組成的選項(xiàng)列表,它允許程序通過命令行或配置文件來讀取這些參數(shù)選項(xiàng)拷橘,eosiod的很多操作就是通過命令行來配置的,具體的命令行可以使用-help命令進(jìn)行查看喜爷。
構(gòu)建選項(xiàng)器的過程如下:
在set_program_options中會(huì)有以下操作:
具體選項(xiàng)器如何構(gòu)造冗疮,在截圖的文字中做了簡單描述,eosiod初始化的過程其實(shí)就是包含了若干個(gè)插件的初始化的過程贞奋,因此要將各個(gè)插件的選項(xiàng)器構(gòu)建完成:
當(dāng)識(shí)別到用戶輸入的命令行參數(shù)之后赌厅,會(huì)進(jìn)行相應(yīng)的操作,下面簡單的瀏覽下這些參數(shù)的具體意義:
各個(gè)插件會(huì)根據(jù)用戶的指令參數(shù)去完成初始化操作轿塔,以上這些選項(xiàng)器設(shè)置完成之后特愿,會(huì)繼續(xù)進(jìn)行所有插件的初始化操作:
appbase會(huì)遍歷所有的插件,然后去分別初始化這些插件勾缭。
在eosiod中初始化了三個(gè)插件:chain_plugin,http_plugin,net_plugin揍障。
本文簡單的介紹了eosiod的初始化內(nèi)容,主要是eosiod是如何一步步的初始化這些插件的俩由,那么這些插件是做什么用的毒嫡?他們分別實(shí)現(xiàn)了什么功能?是如何實(shí)現(xiàn)的幻梯?這一個(gè)個(gè)疑問我們會(huì)在后面的文章中進(jìn)行展示兜畸。