lock.c
上传用户:qys8201
上传日期:2021-12-11
资源大小:978k
文件大小:4k
源码类别:

模拟服务器

开发平台:

C/C++

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "lock.h"
  4. #include "main.h"
  5. #include "char.h"
  6. LockNode **userlock;
  7. void Lock_Init(void)
  8. {
  9. int i;
  10.   userlock= (LockNode **) calloc( 1, sizeof(LockNode *) * 256);
  11. memset(userlock, 0, sizeof(userlock));
  12. for (i=0; i<256; i++) {
  13. userlock[i] = (LockNode *)calloc( 1,sizeof(LockNode));
  14. userlock[i]->use=0;
  15. userlock[i]->next=NULL;
  16. userlock[i]->prev=NULL;
  17. memset( userlock[i]->cdkey, 0, sizeof( userlock[i]->cdkey) );
  18. memset( userlock[i]->server, 0, sizeof( userlock[i]->server) );
  19. #ifdef _LOCK_ADD_NAME
  20. memset( userlock[i]->name, 0, sizeof( userlock[i]->name) );
  21. #endif
  22. }
  23. log("存贮器初始化");
  24. }
  25. LockNode *Creat_newNodes( void)
  26. {
  27. LockNode *newln=NULL;
  28. newln = ( LockNode *)calloc( 1, sizeof( LockNode) );
  29. if( newln == NULL ){
  30. log( "err Can't calloc:%d lock nodes !!n", sizeof(LockNode));
  31. return 0;
  32. }
  33. newln->use=0;
  34. newln->next=NULL;
  35. memset( newln->cdkey, 0, sizeof( newln->cdkey) );
  36. memset( newln->server, 0, sizeof( newln->server) );
  37. #ifdef _LOCK_ADD_NAME
  38. memset( newln->name, 0, sizeof( newln->name) );
  39. #endif
  40. return newln;
  41. }
  42. #ifdef _LOCK_ADD_NAME
  43. int InsertMemLock(int entry, char *cdkey,char *name, char *passwd, char *server, int process, char *deadline)
  44. #else
  45. int InsertMemLock(int entry, char *cdkey, char *passwd, char *server, int process, char *deadline)
  46. #endif
  47. {
  48. int j;
  49. LockNode *ln = userlock[entry];
  50. #ifdef _LOCK_ADD_NAME
  51. log("进入游戏:目录:char/0x%x 账号:%s 名称:%s 服务器:%sn", entry, cdkey, name, server);
  52. #else
  53. log("进入游戏:目录:%x 账号:%s 服务器:%sn", entry, cdkey, server);
  54. #endif
  55.   
  56. while( (ln!=NULL) && (ln->use!=0)) ln=ln->next;
  57. if( ln == NULL ) {
  58. LockNode *fhead=NULL;
  59. LockNode *p = userlock[entry];
  60. log("Add more lock nodes.n");
  61. while (p->next!=NULL) p=p->next;
  62. fhead = p;
  63. for( j=0; j<32; j++) { // allocate more nodes
  64. if( (ln = Creat_newNodes() ) == NULL ) return 0;
  65. ln->prev=p;
  66. p->next=ln;
  67. p=ln;
  68. }
  69. while( (fhead!=NULL) && (fhead->use!=0)) fhead=fhead->next;
  70. ln = fhead;
  71. }
  72. if( ln->use !=0 ) return 0;
  73. ln->use = 1;
  74. strcpy( ln->cdkey, cdkey);
  75. strcpy( ln->server, server);
  76. #ifdef _LOCK_ADD_NAME
  77. strcpy( ln->name, name);
  78. #endif
  79. ln->process = process;
  80. return 1;
  81. }
  82. int DeleteMemLock(int entry, char *cdkey, int *process)
  83. {
  84. LockNode *ln = userlock[entry];
  85. log("删除内存信息 位置=%x 账号=%s ..", entry, cdkey);
  86. while (ln!=NULL) {
  87. if( ln->use != 0) {
  88. if( strcmp( ln->cdkey, cdkey ) == 0 ) break;
  89. }
  90. ln=ln->next;
  91. }
  92. if( ln != NULL ) {
  93. ln->use=0;
  94. memset( ln->cdkey, 0, sizeof( ln->cdkey) );
  95. memset( ln->server, 0, sizeof( ln->server) );
  96. #ifdef _LOCK_ADD_NAME
  97. memset( ln->name, 0, sizeof( ln->name) );
  98. #endif
  99. *process = ln->process;
  100. log("删除成功n");
  101. return 1;
  102. }
  103. log("删除失败!!n");
  104. return 0;
  105. }
  106. void DeleteMemLockServer(char *sname)
  107. {
  108. int i;
  109. LockNode *ln;
  110. for (i=0; i<256; i++) {
  111. ln = userlock[i];
  112. while (ln!=NULL) {
  113. if (ln->use != 0) {
  114. if( strcmp( ln->server, sname)==0) {
  115. ln->use=0;
  116. }
  117. }
  118. ln=ln->next;
  119. }
  120. }
  121. }
  122. int isMemLocked(int entry, char *cdkey)
  123. {
  124. LockNode *ln = userlock[entry];
  125. while (ln!=NULL) {
  126. if (ln->use != 0) {
  127. if (strcmp(ln->cdkey, cdkey)==0) {
  128. if( !strcmp(ln->server, "星系移民"))
  129. log(" 星系移民中 ");
  130. break;
  131. }
  132. }
  133. ln=ln->next;
  134. }
  135. if (ln!=NULL) return 1; else return 0;
  136. }
  137. int GetMemLockState(int entry, char *cdkey, char *result)
  138. {
  139. LockNode *ln = userlock[entry];
  140.   
  141. while (ln!=NULL) {
  142. if (ln->use != 0) {
  143. if (strcmp(ln->cdkey, cdkey)==0) {
  144. sprintf(result, "%s 是在 %s 被锁的.",cdkey, ln->server);
  145. return 1;
  146. }
  147. }
  148. ln=ln->next;
  149. }
  150. sprintf(result, "%s 没有被锁.", cdkey);
  151. return 0;
  152. }
  153. int GetMemLockServer(int entry, char *cdkey, char *result)
  154. {
  155. LockNode *ln = userlock[entry];
  156.    while (ln!=NULL) {
  157. if (ln->use != 0) {
  158. if (strcmp(ln->cdkey, cdkey)==0) {
  159. strcpy(result, ln->server);
  160. return 1;
  161. }
  162. }
  163. ln=ln->next;
  164. }
  165. return 0;
  166. }
  167. int LockNode_getGname( int entries, char *id, char *gname)
  168. {
  169. LockNode *ln = userlock[entries];
  170. while (ln!=NULL) {
  171. if (ln->use != 0) {
  172. if( !strcmp(ln->cdkey, id) ){
  173. sprintf( gname,"%s", ln->server );
  174. return 1;
  175. }
  176. }
  177. ln=ln->next;
  178. }
  179. return 0;
  180. }