S3DBInterface.cpp
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:4k
源码类别:

模拟服务器

开发平台:

C/C++

  1. // S3DBInterface.cpp : Defines the entry point for the DLL application.
  2. //
  3. #include "S3DBInterface.h"
  4. #include "DBTable.h"
  5. //需要增加一些二级的索引
  6. //在此构造事务和复制的环境,线程的观点,需要一个独立的线程来做这件事情?
  7. //日志数据库需要定时进行清理
  8. ZDBLogTable *db_table;
  9. int get_account(DB *db, const DBT *pkey, const DBT *pdata, DBT *ikey) { //给定一个完整的buffer,得到account作为索引
  10. memset(ikey, 0, sizeof(DBT));
  11. TRoleData *pRoleData = (TRoleData *)pdata->data;
  12. ikey->data = pRoleData->BaseInfo.caccname;
  13. ikey->size = strlen(pRoleData->BaseInfo.caccname) + 1;
  14. return 0;
  15. }
  16. S3DBI_API BOOL S3DBI_InitDBInterface()
  17. {
  18. db_table = new ZDBLogTable("database", "roledb"); 
  19. db_table->addIndex(get_account);
  20. if(db_table->open()) return TRUE;
  21. else return FALSE;
  22. }
  23. S3DBI_API void S3DBI_ReleaseDBInterface() //释放数据库引擎
  24. {
  25. db_table->close();
  26. delete db_table;
  27. }
  28. S3DBI_API void * S3DBI_GetRoleInfo(IN OUT BYTE * pRoleBuffer, IN char * strUser, IN OUT int &nBufLen)
  29. {
  30. int size;
  31. char *buffer = db_table->search(strUser, strlen(strUser) + 1, size);
  32. if(buffer) {
  33. nBufLen = size;
  34. memmove(pRoleBuffer, buffer, size);
  35. delete[] buffer;
  36. }
  37. else nBufLen = 0;
  38. return pRoleBuffer;
  39. }
  40. //保存角色的信息,如果数据库不存在该玩家,则增加该玩家
  41. //bAutoInsertWhenNoExistUser 设为TRUE时表示,如果需要保存的该玩家在数据库中并不存在则自动加入到数据库中,FALSE则不增加直接返回错误
  42. //注意INI文件只须存放将需要改动的数据,不需改动的数据将自动保存原状。
  43. S3DBI_API int S3DBI_SaveRoleInfo(IN BYTE * pRoleBuffer, IN char * strUser, BOOL bAutoInsertWhenNoExistUser)
  44. {
  45. //需要存放帐号首先找到数据
  46. TRoleData *pRoleData = (TRoleData *)pRoleBuffer;
  47. if(strUser[0] == 0) strUser = pRoleData->BaseInfo.szName;
  48. if(db_table->add(strUser, strlen(strUser) + 1, (char *)pRoleBuffer,  pRoleData->dwDataLen)) return 1;
  49. else return 0;
  50. }
  51. S3DBI_API void S3DBI_ShowDebugInfo(IN BYTE * pRoleBuffer, char * pShowString)
  52. {
  53. return;
  54. }
  55. S3DBI_API int S3DBI_GetRoleListOfAccount(char * szAccountName, S3DBI_RoleBaseInfo * RoleBaseList, int nMaxCount)
  56. {
  57. int size = 0;
  58. S3DBI_RoleBaseInfo *base_ptr = RoleBaseList;
  59. int count = 0;
  60. char *buffer = db_table->search(szAccountName, strlen(szAccountName) + 1, size, 0);
  61. while(buffer) {
  62. if(count < nMaxCount) {
  63. TRoleData *pRoleData = (TRoleData *)buffer;
  64. strncpy(base_ptr->szRoleName, pRoleData->BaseInfo.szName, 32);
  65. base_ptr->nSex = pRoleData->BaseInfo.bSex;
  66. base_ptr->nHelmType = pRoleData->BaseInfo.ihelmres;
  67. base_ptr->nArmorType = pRoleData->BaseInfo.iarmorres;
  68. base_ptr->nWeaponType = pRoleData->BaseInfo.iweaponres;
  69. base_ptr->nLevel = pRoleData->BaseInfo.ifightlevel;
  70. base_ptr++;
  71. }
  72. count++;
  73. buffer = db_table->next(size);
  74. }
  75. return count;
  76. }
  77. //删除角色
  78. S3DBI_API int S3DBI_DeleteRole(char * strUser)
  79. {
  80. return 1;
  81. }
  82. S3DBI_API void* S3DBI_GetList(S3DBI_LISTNAME listname,  char * strUser)
  83. {
  84. return 0;
  85. }
  86. S3DBI_API void* S3DBI_GetList(S3DBI_LISTNAME listname,  int iid)
  87. {
  88. return 0;
  89. }
  90. S3DBI_API int S3DBI_GetCountOfList(S3DBI_LISTNAME listname, void * pList)
  91. {
  92. return 0;
  93. }
  94. S3DBI_API int S3DBI_DeleteDataAtList(S3DBI_LISTNAME listname, void * pList, int i )
  95. {
  96. return 0;
  97. }
  98. S3DBI_API void S3DBI_ReleaseListBuffer(S3DBI_LISTNAME listname, void * pList)
  99. {
  100. return;
  101. }
  102. S3DBI_API int S3DBI_ClearList(S3DBI_LISTNAME listname, void * pList)
  103. {
  104. return 0;
  105. }
  106. S3DBI_API int S3DBI_DeleteData(S3_DB_TABLENAME tablename, int nId)
  107. {
  108. return 0;
  109. }
  110. S3DBI_API int S3DBI_DeleteData(S3_DB_TABLENAME tablename, char * strUser)
  111. {
  112. return 0;
  113. }
  114. S3DBI_API int S3DBI_GetListData(S3DBI_LISTNAME listname, void * pList, int i , KTabFileCtrl *pTabFile)
  115. {
  116. return 0;
  117. }
  118. S3DBI_API int S3DBI_InsertDataAtList(S3DBI_LISTNAME listname, void * pList, KTabFileCtrl *pTabFile)
  119. {
  120. return 0;
  121. }
  122. S3DBI_API int S3DBI_GetData(S3_DB_TABLENAME tablename, int nId, KTabFileCtrl *pTabFile)
  123. {
  124. return 0;
  125. }
  126. S3DBI_API int S3DBI_GetData(S3_DB_TABLENAME tablename, char * strUser, KTabFileCtrl * pTabFile)
  127. {
  128. return 0;
  129. }
  130. S3DBI_API int S3DBI_UpdateData(S3_DB_TABLENAME tablename, int nId, KTabFileCtrl *pTabFile)
  131. {
  132. return 0;
  133. }
  134. S3DBI_API int S3DBI_UpdateData(S3_DB_TABLENAME tablename, char * strUser, KTabFileCtrl *pTabFile)
  135. {
  136. return 0;
  137. }
  138. S3DBI_API int S3DBI_InsertData(S3_DB_TABLENAME tablename,  KTabFileCtrl *pTabFile)
  139. {
  140. return 0;
  141. }