元宇宙鏈遊系統開發原始碼(成熟技術)
原始檔(dispatch.c):
u32 func_ChipCheck(u8 *cmd_in, u8 *cmd_out){ /*do something*/ PRINT_WARN("func %s,line num: %d, %p,%d!\r\n", __FUNCTION__, __LINE__, cmd_in, 2); return (0);}u32 func_DataTrans(u8 *cmd_in, u8 *cmd_out){ /*do something*/ PRINT_WARN("func %s,line num: %d, %p,%d!\r\n", __FUNCTION__, __LINE__, cmd_in, 2); return (0);}u32 func_DataSave(u8 *cmd_in, u8 *cmd_out){ /*do something*/ PRINT_WARN("func %s,line num: %d, %p,%d!\r\n", __FUNCTION__, __LINE__, cmd_in, 2); return (0);}複製
建立索引關係,即functionlist中的功能介面和funcCodelist的介面名稱一一對應起來,同時編寫索引查詢函式。在原始檔進行定義:
pFunc functionlist[] = { func_ChipCheck, func_DataTrans, func_DataSave,};u8 funcCodelist[] ={ ChipCheck, DataTrans, DataSave,};/** * 功能介面的回撥函式 * * @author KingBoy (2020/5/24) * * @param p 被呼叫的函式 * @param cmd_in 輸入引數 * @param cmd_out 輸出引數 * * @return u32 0-success */u32 dispath_callback(pFunc p, u8 *cmd_in, u8 *cmd_out){ u32 ret = 0; ret = (*p)(cmd_in, cmd_out); return (ret);}/** * 功能派發介面 * * @author KingBoy (2020/5/23) * * @param cmd_ptr 輸入輸出:資料起始地址 * @param cmd_len 輸入輸出:資料長度 */void function_dispatch(u8 *cmd_ptr, u32 *cmd_len){ int func_code; func_code = getEnumIndex(*(cmd_ptr)); PRINT_WARN("func %s,line num: %d, %02x\r\n", __FUNCTION__, __LINE__, func_code); if (func_code != -1) { //用法1,直接定義函式陣列後呼叫 //functionlist[func_code](cmd_ptr, cmd_ptr); //用法2,使用回撥函式進行處理 dispath_callback(functionlist[func_code], cmd_ptr, cmd_ptr); } else { PRINT_WARN("func %s,line num: %d, %02x\r\n", __FUNCTION__, __LINE__, func_code); }}/** * 獲取功能的索引位置 * * @author KingBoy (2020/5/23) * * @param value 功能碼值 * * @return int 索引位置,-1為未找到 */int getEnumIndex(u8 value){ int i = 0; for (i = 0; i < sizeof(funcCodelist); i++) { if (value == funcCodelist[i]) { return (i); } } if (i >= sizeof(funcCodelist)) { return (ERR_NOFUNC); } return (0);}複製
function_dispatch
即處理的函式,
cmd_ptr
將外部資料傳入,根據第一個位元組的取值決定是執行哪個功能函式(
*(cmd_ptr)
),在
getEnumIndex
中獲得該功能的索引位置,如果查到的位置合法(不是-1),則呼叫回撥函式
dispath_callback
並將需要呼叫的功能函式
functionlist[func_code]
傳入,同時傳入函式的引數(
u8 *cmd_in, u8 *cmd_out
)。
對於相似的功能介面來說,可以選擇直接呼叫(
functionlist[func_code](cmd_ptr, cmd_ptr);
)或者是回撥函式呼叫(
dispath_callback(functionlist[func_code], cmd_ptr, cmd_ptr);
)兩者的處理等價。
如果使用回撥函式,當想要修改功能時,可以只在
dispath_callback
進行操作而不需要對底層進行修改。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70016646/viewspace-2936468/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- NFT鏈遊元宇宙遊戲/系統開發/NFT元宇宙技術開發搭建元宇宙遊戲
- NFT鏈遊系統開發流程原始碼部署方案(成熟技術)原始碼
- 潮玩宇宙/系統開發/NFT鏈遊/NFT元宇宙開發技術元宇宙
- NFT元宇宙鏈遊/鏈遊系統技術開發/應用/DAPP元宇宙APP
- 3D元宇宙鏈遊開發說明 鏈遊系統開發技術方案 3D鏈遊原始碼模式3D元宇宙原始碼模式
- 鏈遊系統開發流程 元宇宙3D鏈遊系統開發(開發邏輯) 元宇宙3D鏈遊開發成品原始碼元宇宙3D原始碼
- NFT元宇宙鏈遊系統開發說明(原始碼示例)元宇宙原始碼
- 鏈遊開發功能版/NFT鏈遊系統開發運營版/區塊鏈遊戲系統開發/成熟技術/原始碼案例區塊鏈遊戲原始碼
- NFT鏈遊系統技術開發/NFT元宇宙鏈遊開發/Defi/應用/DAPP元宇宙APP
- NFT遊戲開發丨GameFi鏈遊元宇宙系統開發技術示例遊戲開發GAM元宇宙
- 農民世界鏈遊元宇宙遊戲系統技術開發程式元宇宙遊戲
- NFT/GameFi鏈遊元宇宙系統NFT遊戲開發功能技術GAM元宇宙遊戲開發
- GameFi鏈遊系統技術開發/NFT遊戲元宇宙系統開發詳情分析GAM遊戲元宇宙
- 元宇宙鏈遊開發技術實現及原始碼實現方式元宇宙原始碼
- nft鏈遊元宇宙(NFT遊戲)系統模式開發技術詳情元宇宙遊戲模式
- NFT鏈遊遊戲元宇宙系統技術開發設計詳情遊戲元宇宙
- 鏈遊NFT遊戲/NFT元宇宙/系統技術開發/NFT數藏遊戲元宇宙
- java底層鏈遊系統開發技術功能(成熟技術)Java
- Stepn跑鞋跑步鏈遊系統開發/趣步系統開發/詳情案例/成熟技術/原始碼版原始碼
- Dapp/Stepn跑鞋鏈遊系統開發詳細技術案例/成熟方案/原始碼功能APP原始碼
- mate雲端元宇宙系統智慧合約鏈遊開發技術元宇宙
- 陽光農場鏈遊元宇宙系統開發技術詳情元宇宙
- Doodles數藏NFT元宇宙開發系統技術丨原始碼丨Doodles元宇宙功能元宇宙原始碼
- GameFi+NFT鏈遊系統開發/NFT遊戲元宇宙技術開發詳情GAM遊戲元宇宙
- NFT鏈遊系統開發丨NFT元宇宙遊戲功能開發技術詳情元宇宙遊戲
- GameFi+NFT鏈遊遊戲元宇宙開發程式設計丨鏈遊系統開發技術解析GAM遊戲元宇宙程式設計
- 元宇宙遊戲系統開發(功能詳情)丨元宇宙鏈遊系統開發(開發原理)元宇宙遊戲
- 金武盟NFT鏈遊元宇宙系統開發詳情(技術分析)元宇宙
- OP鏈DAPP質押挖礦系統開發原始碼(成熟技術)搭建APP原始碼
- NFT遊戲GameFi元宇宙(鏈遊遊戲)系統原始碼開發(詳情方案)遊戲GAM元宇宙原始碼
- 元宇宙鏈遊系統軟體開發元宇宙
- NFT數字藏品系統開發原始碼部署丨NFT鏈遊元宇宙遊戲系統開發原始碼搭建原始碼元宇宙遊戲
- 關於GameFi鏈遊NFT遊戲元宇宙系統技術開發(搭建設計)GAM遊戲元宇宙
- NFT遊戲鏈遊開發設計丨NFT鏈遊元宇宙系統技術開發丨DAPP丨NFT遊戲元宇宙APP
- stepn跑鞋鏈遊系統開發成熟技術程式碼方案(全合約)
- 鏈遊模式系統開發搭建功能丨鏈遊系統開發專案方案(技術成熟)模式
- Stepn/NFT跑鞋跑步鏈遊系統開發/技術詳解/規則及玩法/原始碼成熟原始碼
- dapp元宇宙鏈遊開發【詳情】技術實現及原始碼實現方式APP元宇宙原始碼