JYDEST.C
上传用户:bjghjy
上传日期:2007-01-07
资源大小:379k
文件大小:6k
源码类别:

金融证券系统

开发平台:

Visual C++

  1. #include <windows.h>
  2. #include <time.h>
  3. #include "hq.h"
  4. #include "pctcp.h"
  5. #include "sv_jy.h"
  6. #include "jydest.h"
  7. JY_DESTS jy_dests;
  8. #define MAX_JY_USER_COUNT 100
  9. #define MAX_JY_TIME 800
  10. JY_DEST jy_dest[MAX_JY_USER_COUNT];
  11. int jy_dest_count=0;
  12. BOOL fJyDestInited =FALSE;
  13. void FreeJyDest(void);
  14. LPJY_DEST GetJyDest(char *);
  15. HANDLE hThrdScanJyDest =NULL;
  16. extern HWND ghWndMain;
  17. extern BOOL run_cancelled;
  18. extern void ErrMsg(HWND, LPSTR);
  19. extern char key[9];
  20. BOOL JyDestInit(void)
  21. {
  22. fJyDestInited =TRUE;
  23. memset(&jy_dests, 0, sizeof(jy_dests));
  24. memset(&jy_dest, 0, sizeof(JY_DEST)*MAX_JY_USER_COUNT);
  25. jy_dests.lpDestHead =&jy_dest[0];
  26. jy_dest_count=0;
  27. return TRUE;
  28. }
  29. void JyDestExit(void)
  30. {
  31. if(!fJyDestInited) return;
  32. fJyDestInited =FALSE;
  33. //FreeJyDest();
  34. if(hThrdScanJyDest) CloseHandle(hThrdScanJyDest);
  35. }
  36. int GetJyDestCount(void)
  37. {
  38. return jy_dest_count;
  39. }
  40. LPJY_DEST  AddJyDest(int sd,
  41. int reqType, char curJys, int recNum, char *lpgddm, int jyNum,int zqsid)
  42. {
  43. LPJY_DEST lpDestNext, lpDestTmp;
  44. lpDestNext =jy_dests.lpDestHead;
  45. if(jy_dest_count>MAX_JY_USER_COUNT)
  46. return NULL;
  47. lpDestTmp=&jy_dest[jy_dest_count];
  48. if(jy_dest_count>0)
  49. jy_dest[jy_dest_count-1].lpNext=&jy_dest[jy_dest_count];
  50. jy_dest_count++;
  51. strcpy(lpDestTmp->gddm, lpgddm);
  52. lpDestTmp->reqType =reqType;
  53. lpDestTmp->zqsid =zqsid;
  54. lpDestTmp->sd =sd;
  55. lpDestTmp->isReqEnd =FALSE;
  56. lpDestTmp->userId =rand();
  57. lpDestTmp->recNum =recNum;
  58. lpDestTmp->curJys =(char)curJys;
  59. lpDestTmp->jyNum =jyNum;
  60. time(&lpDestTmp->startTime);
  61. strcpy(lpDestTmp->DesKey,key);
  62. if(lpDestNext !=jy_dests.lpDestHead)
  63. lpDestNext->lpNext =lpDestTmp;
  64. else jy_dests.lpDestHead =lpDestTmp;
  65. jy_dests.destCount ++;
  66. return lpDestTmp;
  67. }
  68. int ChangeJyDest(int sd, LPJY_DEST lpJyDest, int reqType, char curJys,
  69.  int userId, int jyNum)
  70. {
  71. lpJyDest->isReqEnd =TRUE;
  72. if(reqType ==REQ_CHKUSR)
  73. {
  74. lpJyDest->userId =rand();
  75. lpJyDest->zqsid = userId;
  76. strcpy(lpJyDest->DesKey,key);
  77. }
  78. lpJyDest->sd =sd;
  79. lpJyDest->reqType =reqType;
  80. lpJyDest->curJys =curJys;
  81. lpJyDest->jyNum =jyNum;
  82. time(&lpJyDest->startTime);
  83. lpJyDest->isReqEnd =FALSE;
  84. return 0;
  85. }
  86. int CheckJyDest(int sd, int reqType, char curJys,
  87. char *gddm, int userId, LPJY_DEST *lpDestTmp)
  88. {
  89. *lpDestTmp =GetJyDestBySd(sd);
  90. if(reqType ==REQ_CHKUSR)
  91. {
  92. if(*lpDestTmp ==NULL)
  93. return 0;
  94. else
  95. return 1;
  96. }
  97. else
  98. {
  99. if(*lpDestTmp ==NULL) 
  100. return -1;
  101. if((*lpDestTmp)->isReqEnd ==FALSE) 
  102. return -2;
  103. if((*lpDestTmp)->userId !=userId) 
  104. return -3;
  105. }
  106. return 1;
  107. }
  108. void JyDest_Exit(int sd)
  109. {
  110. LPJY_DEST lpJyDest;
  111. lpJyDest=GetJyDestBySd(sd);
  112. if(lpJyDest!=NULL)
  113. {
  114. lpJyDest->sd=0;
  115. memset(lpJyDest->DesKey,0,9);
  116. lpJyDest->isReqEnd =TRUE;
  117. }
  118. }
  119. LPJY_DEST GetJyDest(char *lpgddm)
  120. {
  121. int i;
  122.   LPJY_DEST lpDestTmp;
  123. for(i=0;i<jy_dest_count;i++)
  124. {
  125. lpDestTmp = &jy_dest[i];
  126. if(!lpDestTmp) break;
  127. if(!strncmp(lpDestTmp->gddm,lpgddm,strlen(lpgddm)))
  128. return lpDestTmp;
  129. }
  130. return NULL;
  131. }
  132. LPJY_DEST GetJyDestBySd(int sd)
  133. {
  134. int i;
  135.   LPJY_DEST lpDestTmp;
  136. for(i=0;i<jy_dest_count;i++)
  137. {
  138. lpDestTmp = &jy_dest[i];
  139. if(!lpDestTmp) break;
  140. if(lpDestTmp->sd==sd)
  141. return lpDestTmp;
  142. }
  143. return NULL;
  144. }
  145. void FreeJyDest(void)
  146. {
  147. LPJY_DEST lpDestNext, lpDestTmp;
  148. int i;
  149. return ;
  150. lpDestNext =lpDestTmp =jy_dests.lpDestHead;
  151. for(i =0; i<jy_dests.destCount; i++)
  152. {
  153. if(lpDestTmp ==NULL) break;
  154. lpDestNext =lpDestTmp->lpNext;
  155. free(lpDestTmp);
  156. lpDestTmp =lpDestNext;
  157. }
  158. jy_dests.destCount =0;
  159. }
  160. LPJY_DEST GetFirstIdelRec(void)
  161. {
  162. int i;
  163.   LPJY_DEST lpDestTmp;
  164. for(i=0;i<jy_dest_count;i++)
  165. {
  166. lpDestTmp = &jy_dest[i];
  167. if(!lpDestTmp) break;
  168. if(lpDestTmp->sd==0)
  169. return lpDestTmp;
  170. }
  171. return NULL;
  172. }
  173. long TF_ScanJyDest(void)
  174. {
  175. int i;
  176. LPJY_DEST lpDestNext;
  177. time_t time_now;
  178. //while(1)
  179. //{
  180. //if(run_cancelled) return 0;
  181. for(i =0; i<jy_dest_count; i++)
  182. {
  183. if(run_cancelled) break;
  184. ShoutBlockingHook();
  185. lpDestNext =&jy_dest[i];
  186. if(!lpDestNext) break;
  187. if(lpDestNext->sd==0)
  188. continue;
  189. time(&time_now);
  190. if(difftime(time_now, lpDestNext->startTime)>MAX_JY_TIME)
  191. {
  192. lpDestNext->sd=0;
  193. memset(lpDestNext->DesKey,0,9);
  194. lpDestNext->isReqEnd =TRUE;
  195. continue;
  196. }
  197. if(lpDestNext->isReqEnd ||lpDestNext->isSending) 
  198. continue;
  199. if(difftime(time_now, lpDestNext->startTime)>MAX_WAIT_TIME)
  200. {
  201. lpDestNext->isReqEnd =TRUE;
  202. Jy_SendRet(lpDestNext->sd, lpDestNext->reqType, ANS_TIME_OUT, lpDestNext->jyNum);
  203. continue;
  204. }
  205. switch(lpDestNext->reqType)
  206. {
  207. case REQ_CHKUSR:
  208. if(JyDest_ChkUsr(lpDestNext)<0)
  209. goto err_find;
  210. break;
  211. case REQ_CHGPWD:
  212. if(JyDest_ChgPwd(lpDestNext)<0)
  213. goto err_find;
  214. break;
  215. case REQ_BUYSEL:
  216. if(JyDest_BuySell(lpDestNext)<0)
  217. goto err_find;
  218. break;
  219. case REQ_CANCEL:
  220. if(JyDest_Cancel(lpDestNext)<0)
  221. goto err_find;
  222. break;
  223. case REQ_YECX:
  224. if(JyDest_Yecx(lpDestNext)<0)
  225. goto err_find;
  226. break;
  227. case REQ_CJCX:
  228. if(JyDest_Cjcx(lpDestNext)<0)
  229. goto err_find;
  230. break;
  231. case REQ_WTCX:
  232. if(JyDest_Wtcx(lpDestNext)<0)
  233. goto err_find;
  234. break;
  235. case REQ_EXIT:
  236. lpDestNext->isReqEnd =TRUE;
  237. break;
  238. default: 
  239. continue;
  240. }
  241. continue;
  242. err_find:
  243. lpDestNext->isReqEnd =TRUE;
  244. }
  245. // Sleep(1000);
  246. //}
  247. //ExitThread(0);
  248. return 0;
  249. }
  250. int CreateScanJyDestThread(void)
  251. {
  252. // LONG lThreadId;
  253. //
  254. // hThrdScanJyDest =CreateThread(NULL, 0,
  255. // (LPTHREAD_START_ROUTINE)TF_ScanJyDest,
  256. // NULL, CREATE_SUSPENDED, (LPDWORD)&lThreadId);
  257. // if(!hThrdScanJyDest) return -1;
  258. // SetThreadPriority(hThrdScanJyDest, THREAD_PRIORITY_NORMAL);
  259. //
  260. // ResumeThread(hThrdScanJyDest);
  261. return 0;
  262. }