【正文】
(如圖 ) 圖 用戶更換大廳后, 表 hsgcverifycode 中的變化 ③ 用戶 Mess 分別購(gòu)買(mǎi) 1 號(hào)和 2 號(hào)物品,點(diǎn)擊確認(rèn)后,其金錢(qián)以及物品信息在對(duì)應(yīng)表中發(fā)生變化。 ① 用戶 Ronaldo 和 Mess 登錄,其賬號(hào)、密碼驗(yàn)證成功后,表 hsgcverifycode中產(chǎn)生登錄驗(yàn)證碼以及相應(yīng)數(shù)據(jù) 。 圖 數(shù)據(jù)庫(kù)系統(tǒng)界面視圖 現(xiàn)在,我們模擬用戶的一些操作,然后觀察數(shù)據(jù)庫(kù)中的變化。 void ClientHSRecvPacketProcess::Handle_DSHS_C_RequirePresent (WorldPacketamp。 void ClientHSRecvPacketProcess::Handle_DSHS_C_DiscardPresent (WorldPacketamp。 void ClientHSRecvPacketProcess::Handle_DSHS_C_ReceivePresent (WorldPacketamp。 void ClientHSRecvPacketProcess::Handle_DSHS_C_Present (WorldPacketamp。 void ClientHSRecvPacketProcess::Handle_DSHS_C_UserPay (WorldPacketamp。 void ClientHSRecvPacketProcess::Handle_DSHS_C_UserConfigThing (WorldPacketamp。 void ClientHSRecvPacketProcess::Handle_DSHS_C_UserDiscardThing (WorldPacketamp。 void ClientHSRecvPacketProcess::Handle_DSHS_C_UserActiveThing 重慶大學(xué)本科學(xué)生畢業(yè)設(shè)計(jì)(論文) 4 系統(tǒng)難點(diǎn)技術(shù)分 析與設(shè)計(jì) 32 (WorldPacketamp。 void ClientHSRecvPacketProcess::Handle_DSHS_C_UpdatePlayerInfo (WorldPacket amp。 void ClientHSRecvPacketProcess::Handle_DSHS_C_PlayerQuit (WorldPacketamp。 void ClientHSRecvPacketProcess::Handle_DSHS_C_SaveSelectHS (WorldPacketamp。 void ClientHSRecvPacketProcess::Handle_DSHS_C_QueryLogin (WorldPacketamp。 void ClientLSRecvPacketProcess::Handle_DSLS_C_LoginVerify (WorldPacketamp。我們?yōu)閿?shù)據(jù)庫(kù)服務(wù)器提供如下對(duì)應(yīng)的函數(shù)來(lái)實(shí)現(xiàn)每個(gè)部分的功能。以上函數(shù)的具體功能都是通過(guò)調(diào)用 C API 函數(shù)實(shí)現(xiàn)的。 + Q u e r y R e s u l t ( )+ ~ Q u e r y R e s u l t ( )+ b o o l N e x t R o w ( )+ F i e l d * F e t c h ( )+ u n s i g n e d l o n g G e t F i e l d C o u n t ( )+ u n s i g n e d l o n g l o n g G e t R o w C o u n t ( ) F i e l d * m C u r r e n t R o w u n s i g n e d l o n g m F i e l d C o u n t u n s i g n e d l o n g l o n g m R o w C o u n tQ u e r y R e s u l t 圖 QueryResult 類(lèi) ⑤ QueryResultMysql 類(lèi):是 QueryResult 類(lèi)的子類(lèi),負(fù)責(zé)對(duì)查詢結(jié)果的存儲(chǔ)重慶大學(xué)本科學(xué)生畢業(yè)設(shè)計(jì)(論文) 4 系統(tǒng)難點(diǎn)技術(shù)分 析與設(shè)計(jì) 31 以及操作。 + D B I n t e r f a c e ( )+ ~ D B I n t e r f a c e ( )+ b o o l I n i t i a l i z e ( )+ Q u e r y R e s u l t * P Q u e r y ( )+ Q u e r y R e s u l t * Q u e r y ( )+ b o o l E x e c u t e ( )+ b o o l P E x e c u t e ( )+ i n t P i n g ( ) M Y S Q L * m M y s q l s t d : : v e c t o r s t d : : s t r i n g m T o k e n sD B I n t e r f a c e 圖 DBInterface 類(lèi) ③ Field 類(lèi):主要負(fù)責(zé)對(duì)數(shù)據(jù)庫(kù)表中內(nèi)容的操作。 ① Database 類(lèi) :主要負(fù)責(zé)初始化 MySQL結(jié)構(gòu)以及建立到服務(wù)器的連接。 ⑨ 關(guān)閉連接: mysql_close (MYSQL* mysql)。 2) const char * STDCALL mysql_error(MYSQL *mysql)。 ⑧ 錯(cuò)誤處置: 1) unsigned int STDCALL mysql_errno(MYSQL *mysql)。 6) my_ulonglong STDCALL mysql_insert_id(MYSQL *mysql)。 5) unsigned long * STDCALL mysql_fetch_lengths(MYSQL_RES *result)。 4) MYSQL_FIELD_OFFSET STDCALL mysql_field_tell(MYSQL_RES *res)。 3) MYSQL_ROW_OFFSET STDCALL mysql_row_tell(MYSQL_RES *res)。 2) MYSQL_FIELD_OFFSET STDCALL mysql_field_seek(MYSQL_RES *result, MYSQL_FIELD_OFFSET offset)。 重慶大學(xué)本科學(xué)生畢業(yè)設(shè)計(jì)(論文) 4 系統(tǒng)難點(diǎn)技術(shù)分 析與設(shè)計(jì) 29 ⑦ 涉及結(jié)果集處理的輔助函數(shù): 1) MYSQL_ROW_OFFSET STDCALL mysql_row_seek(MYSQL_RES *result, MYSQL_ROW_OFFSET offset)。mysql)。 //使用完后,要釋放結(jié)果集變量空間。 //返回 MYSQL_FIELD結(jié)構(gòu)的數(shù)組,每個(gè)字段針對(duì)一個(gè)結(jié)果集合。 //返回字段屬性詳細(xì)信息,如:字段名,類(lèi)型,長(zhǎng)度。 //從結(jié)果集讀取一行記錄。 //檢驗(yàn)結(jié)果集列數(shù)。 //檢驗(yàn)結(jié)果集行數(shù)。如果客戶機(jī)內(nèi)存不大,可以每次檢索一行記錄:mysql_use_result()。 //將查詢的結(jié)果保持到變量 result。 ⑤ 對(duì) Select 查詢返回的結(jié)果集處理: 1) MYSQL_RES * result = mysql_store_result(amp。 ④ 查詢實(shí)施: mysql_query(amp。 ③ 選擇數(shù)據(jù)庫(kù): mysql_select_db(amp。 //采用默認(rèn)值的三個(gè)參數(shù)分別為:連接 MySQL服務(wù)器時(shí)使用的端口,連接 MySQL 服務(wù)器時(shí)使用的套接字,控制客戶機(jī)行為使用的一個(gè)或多個(gè)可選標(biāo)志。 // mysql 類(lèi)型為 MYSQL. ② 建立到服務(wù)器連接: mysql_real_connect(amp。 C API 描述: ① 初始化 MYSQL結(jié)構(gòu): mysql_init(amp。 C API 通過(guò)兩個(gè)組件實(shí)現(xiàn): ① 頭文件: ,包含結(jié)構(gòu)和功能說(shuō)明。 [3] MySQL 提供的 C API 由 一組函數(shù)以及一組用于函數(shù)的數(shù)據(jù)類(lèi)型組成,這些函數(shù)與 MySQL 服務(wù)器進(jìn)行通信并訪問(wèn)數(shù)據(jù)庫(kù),可以直接操控?cái)?shù)據(jù)庫(kù),因而顯著地提高了操控效 能。 C 語(yǔ)言的 API 通過(guò) libmysqlclient 庫(kù)與 MySQL 發(fā)布捆綁在一起,并且可以 被 MySQL附帶的所有命令行工具使用。目前, MySQL提供的接口 API 編程語(yǔ)言有 C, Java,PHP, Perl, Python, ODBC, Ruby, Eiffel 和 Tcl 等, 應(yīng)確保在構(gòu)建自己的 MySQL應(yīng)用程序時(shí)不會(huì)因缺少選擇而造成問(wèn)題。 ④ 輔助功能 : 除了前面介紹的各種功能外, MySQL API 還可以提供很多所謂的管理功能,包括返回服務(wù)器的當(dāng)前狀態(tài)(打開(kāi)連接的數(shù)量、得到處理的查詢數(shù)量、服務(wù)器版本等);列出可以使用的數(shù)據(jù)庫(kù)、表、字段和過(guò)程等;管理字符集;提供詳細(xì)的診斷和排錯(cuò)信息;通過(guò)關(guān)閉不活動(dòng)的連接和終止不活動(dòng)的過(guò)程來(lái)清理沒(méi)有使用的內(nèi)存;關(guān)閉、重啟或重載服務(wù)器等。 ③ 報(bào)告錯(cuò)誤 : MySQL API 還提供了基本錯(cuò)誤報(bào)告能力,當(dāng)連接或查詢出現(xiàn)問(wèn)題時(shí),能向調(diào)用者傳遞錯(cuò)誤代碼和信息。 ② 實(shí)施查詢和處理結(jié)果 : 一旦連接建立,應(yīng)用程序可以向服務(wù)器發(fā)送查詢,并檢索結(jié)果。 MySQL API 包含了專(zhuān)門(mén)針對(duì)應(yīng)用程序連接到 MySQL 數(shù)據(jù)庫(kù)服務(wù)器的一系列功能,可以提供各種申請(qǐng)證書(shū),并且為以后的通信開(kāi)放一個(gè)渠道。 MySQL API 可以為開(kāi)發(fā)者提供一些具體能力,下面分別簡(jiǎn)要予以介紹。(如圖 ) G SH SD SD B游 戲 結(jié) 束更 新 數(shù) 據(jù)更 新 數(shù) 據(jù) 請(qǐng) 求操 作返 回操 作 結(jié) 果返 回操 作 結(jié) 果 圖 游戲 結(jié)束后數(shù)據(jù)更新流程圖 13) GC 已經(jīng)在某個(gè) HS 里 ,用戶 退出游戲 時(shí) , HS 請(qǐng)求 DS 進(jìn)行退出操作, DS刪除 DB 中相應(yīng)的 HSGC 驗(yàn)證碼信息。(如圖) 重慶大學(xué)本科學(xué)生畢業(yè)設(shè)計(jì)(論文) 4 系統(tǒng)難點(diǎn)技術(shù)分 析與設(shè)計(jì) 26 G CH SD S查 詢 操 作查 詢 請(qǐng) 求返 回操 作 結(jié) 果返 回操 作 結(jié) 果操 作D B 圖 用戶查詢禮物操作流程圖 12) 用戶一局游戲結(jié)束后,用戶的各種游戲信息會(huì)得到更新, GS 將這些數(shù)據(jù)傳給 HS, HS 請(qǐng)求 DS 進(jìn)行數(shù)據(jù)更新操作并將數(shù)據(jù)傳給 DS。(如圖 ) G CH SD S丟 棄 操 作丟 棄 請(qǐng) 求返 回操 作 結(jié) 果返 回操 作 結(jié) 果操 作D B 圖 用戶丟棄禮物操作流程圖 11) GC 已經(jīng)在某個(gè) HS 里 ,用戶查詢禮物信息時(shí) , HS 請(qǐng)求 DS 進(jìn)行查詢禮物信息操作。 DS 對(duì) DB 進(jìn)行操作,更改 DB 中相應(yīng)的數(shù)據(jù)。操作完成后,傳回更新后的數(shù)據(jù)給 HS,并提示操作成功。(如圖 ) G CH SD S贈(zèng) 送 操 作贈(zèng) 送 請(qǐng) 求返 回操 作 結(jié) 果返 回操 作 結(jié) 果操 作D B 圖 用戶贈(zèng)送禮物操作流程圖 9) GC 已經(jīng)在某個(gè) HS 里 ,用戶在 收到禮物界面中, 確認(rèn)接收禮物時(shí) , HS請(qǐng)求 DS 進(jìn)行接收操作。 DS對(duì) DB 進(jìn)行操作,更改 DB 中相應(yīng)的數(shù)據(jù)。操作完成后,傳回更新后的數(shù)據(jù)給HS,并提示操作成功。(如圖 ) G CH SD S確 認(rèn) 操 作確 認(rèn) 請(qǐng) 求返 回操 作 結(jié) 果返 回操 作 結(jié) 果操 作D B 圖 用戶確認(rèn)物品操作流程圖 7) GC 已經(jīng)在某個(gè) HS 里, 用戶 點(diǎn)擊購(gòu)買(mǎi)結(jié)算, HS 請(qǐng)求 DS 進(jìn)行結(jié)算操作。 DS 對(duì) DB 進(jìn)行操作,更改 DB 中相應(yīng)的數(shù)據(jù)。操作完成后,傳回更新后的數(shù)據(jù)給 HS,并提示操作成功。(如圖 ) G CH SD S激 活 操 作激 活 請(qǐng) 求返 回操 作 結(jié) 果返 回操 作 結(jié) 果操 作D B 圖 用戶激活操作流程圖 5) GC 已經(jīng)在某個(gè) HS 里, 用戶 點(diǎn)擊丟棄按鈕丟棄一個(gè)道具、裝備或者角色,HS 請(qǐng) 求 DS 進(jìn)行丟棄操作。 DS 操作 DB,更改 DB 中相應(yīng)數(shù)據(jù)。 并進(jìn)行更換大廳操作。 否則提示用戶登錄失敗。 DS 在 DB 中查詢是否有匹配信息。 否則提示用戶登陸失敗。DS 在 DB 中查詢是否有匹配信息。所以,本系統(tǒng)采用的是這種數(shù)據(jù)交換方式。 其中值得注意到一點(diǎn)是:游戲服務(wù)器沒(méi)有直接與數(shù)據(jù)庫(kù)服務(wù)器進(jìn)行交互,而是通過(guò)大廳服務(wù)器與數(shù)據(jù)庫(kù)服務(wù)器進(jìn)行數(shù)據(jù)的傳遞。 重慶大學(xué)本科學(xué)生畢業(yè)設(shè)計(jì)(論文) 4 系統(tǒng)難點(diǎn)技術(shù)分 析與設(shè)計(jì) 20 4) 一局游戲結(jié)束后,游戲服務(wù)器將游戲過(guò)程中各種信息的變化傳給大廳服務(wù)器,大廳服務(wù)器請(qǐng)求數(shù)據(jù)庫(kù)服務(wù)器執(zhí)行數(shù)據(jù)更新操作,數(shù)據(jù)庫(kù)服務(wù)器再對(duì)數(shù)據(jù)庫(kù)進(jìn)行更新操 作,并返回更新后的結(jié)果。