cmd.init.c 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. /******************************************************************
  2. ** Copyright (c) 2012 Wuhan Mozit Technology Co., Ltd .
  3. ** FileName: cmd.h
  4. ** Author: YellowBug
  5. ** Mail: Yellow_bug@163.com
  6. ** Date: 2012-7-16
  7. ** Version: v1.0
  8. ** File Description: 服务器指令接口
  9. ******************************************************************/
  10. #include "../include/cmd.init.h"
  11. #include "../include/debug.h"
  12. #include <malloc.h>
  13. //#define MAX_CMD_TYPE 256 /* 指令类型最大个数 */
  14. //#define MAX_CMD_VALUE 256 /* 每种类型最大指令个数 */
  15. /**************
  16. * 指令处理集合
  17. ***************/
  18. static CMDPROC *sCmdMap[MAX_CMD_TYPE] = {NULL};
  19. /*******************************************
  20. * Function Name: cmdAddType
  21. * Arguments: unsigned short
  22. * Return Value: int, 1: 成功, 0: 失败
  23. * Author: YellowBug
  24. * Date: 2012-7-16
  25. * Description: 添加指令类型
  26. ********************************************/
  27. int cmdAddType(unsigned short cmd)
  28. {
  29. if (sCmdMap[cmd])
  30. {
  31. log("[ERROR] 指令类型已存在!");
  32. return 0;
  33. }
  34. sCmdMap[cmd] = (CMDPROC *)calloc(sizeof(CMDPROC), MAX_CMD_VALUE);
  35. return sCmdMap[cmd] ? 1 : 0;
  36. }
  37. /*************************************************************
  38. * Function Name: cmdRegister
  39. * Arguments: unsigned short, unsigned char, CMDPROC
  40. * Return Value: int, 1: 成功, 0: 失败
  41. * Author: YellowBug
  42. * Date: 2012-7-16
  43. * Description: 指令处理函数注册
  44. **************************************************************/
  45. int cmdRegister(unsigned short cmd, unsigned char value, CMDPROC proc)
  46. {
  47. debug("[CMD] 注册指令! type: %u, value: %#x", cmd, value);
  48. if (sCmdMap[cmd])
  49. {
  50. if (sCmdMap[cmd][value])
  51. {
  52. log("[ERROR] 指令已存在! cmd.type = %u, cmd.value = %#x", cmd, value);
  53. return 0;
  54. }
  55. }
  56. return (sCmdMap[cmd][value] = proc) ? 1 : 0; /* 注意这里是赋值(=)不是判断(==) */
  57. }
  58. /******************************************************
  59. * Function Name: cmdGetProc
  60. * Arguments: unsigned short, unsigned char
  61. * Return Value: int, 1: 成功, 0: 失败
  62. * Author: YellowBug
  63. * Date: 2012-7-16
  64. * Description: 获取对应指令的处理函数
  65. *******************************************************/
  66. CMDPROC cmdGetProc(unsigned char cmd, unsigned char value)
  67. {
  68. if (sCmdMap[cmd])
  69. if (sCmdMap[cmd][value])
  70. return sCmdMap[cmd][value];
  71. return NULL;
  72. }
  73. /* END */