KBEngine原始碼剖析1 角色賬號登入和管理

2021-10-04 18:36:05 字數 2078 閱讀 8188

我主要是為了看原始碼,實現,所以後續的部落格,我應該都主要寫自己的原始碼閱讀情況了~

登入時序圖

先貼上一張新賬號登入的時序圖。

流程分析

一次登陸請求,從客戶端發起,到伺服器響應,涉及到至少5個程序間的互動通訊。

pendingloginmgr::plinfos* ptinfos = pendingloginmgr_.find(loginname);

if(ptinfos != null)

ptinfos = new pendingloginmgr::plinfos;

ptinfos->ctype = ctype;

ptinfos->datas = datas;

ptinfos->accountname = loginname;

ptinfos->password = password;

ptinfos->addr = pchannel->addr();

ptinfos->forceinternallogin = forceinternallogin;

pendingloginmgr_.add(ptinfos);

將使用者資訊傳送給dbmgr,進行賬號有效性驗證

dbmgr主要是根據賬號從資料庫中查詢賬號資訊,由於sql的互動通常比較慢,如果在主線程同步等待sql返回,會嚴重影響dbmgr程序的處理效率。這部分cbe採用的是多執行緒處理,它維護了乙個名為pthreadpoolmaps_的執行緒池,關於執行緒池和sql的具體操作在後續單獨文章裡面再寫。這裡dbmgr會建立乙個dbtaskaccountlogin的task物件,並把這個task丟到執行緒池中去跑。

具體**可以參考dbmgr::onaccountlogin和inte***ceshandler_dbmgr::loginaccount。

bool inte***ceshandler_dbmgr::loginaccount(network::channel* pchannel, 

std::string& loginname,

std::string& password, 

std::string& datas)

)!\n",

dbinte***cename));

return false;

}pthreadpool->addtask(new dbtaskaccountlogin(pchannel->addr(),

loginname, loginname, password, server_success, datas, datas, true));

return true;

}

q2: 在坦克大戰demo中,為啥不需要角色賬號建立?

這個原因就在於db查詢賬號這一步,cbe允許在配置了自動建立賬號的情況下,對於乙個新賬號,會自動進行賬號資料的建立,具體**如下:

bool dbtaskaccountlogin::db_thread_process()

] is error!\n",

accountname_));

retcode_ = server_err_db;

return false;

}info_msg(fmt::format("dbtaskaccountlogin::db_thread_process(): not found account[{}], autocreate successfully!\n", 

accountname_));

info.password = kbe_md5::getdigest(password_.data(), (int)password_.length());

}else

], login failed!\n", 

accountname_));

retcode_ = server_err_not_found_account;

return false;

}return false;

}

KBEngine簡單RPG Demo原始碼解析 2

七 服務端資產庫資料夾結構 public void createaccount 複製 外掛程式的主迴圈處理函式 public virtual void process 複製 public void createaccount string username,string password else ...

原始碼剖析 Hashtable 原始碼剖析

hashtable同樣是基於雜湊表實現的,同樣每個元素都是key value對,其內部也是通過單鏈表解決衝突問題,容量不足 超過了閾值 時,同樣會自動增長。hashtable也是jdk1.0引入的類,是執行緒安全的,能用於多執行緒環境中。hashtable同樣實現了serializable介面,它支...

《STL原始碼剖析》筆記 1

第一章 stl概論與版本簡介 一 臨時物件的產生與運用。p36 這裡的臨時物件,指的是一種無名物件 unnamed subjects 如果它們的產生不在程式設計師的預料之下,往往造成效率的負擔,但有時刻意製造臨時物件會讓程式乾淨清爽。刻意製造臨時物件的方法是,在型別名稱後直接加一對小括號,並可指定初...