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

金融证券系统

开发平台:

Visual C++

  1. extern char szDataPath[128];
  2. int UDP_Server_Write_G5M(int jys, int rec_num, int day_start, struct sockaddr *lpdest)
  3. {
  4. int i, j, len;
  5. char fileName[128];
  6. G5M_HEAD G5MHead;
  7. G5M_DATE_HEAD G5MDateHead;
  8. LPGMIN_DATA lpGMinData =NULL;
  9. HFILE hFile;
  10. OFSTRUCT os;
  11. if(jys ==0)
  12. lpszTmp ="SZMIN5";
  13. else if(jys ==1)
  14. lpszTmp ="SHMIN5";
  15. else return -1;
  16. wsprintf(fileName, "%s\%s\%s.dat", szDataPath, lpszTmp,
  17. HqData[jys].lpRecData[rec_num].zqdm);
  18. hFile =OpenFile(fileName, &os, OF_SHARE_DENY_NONE|OF_READ);
  19. if(hFile ==HFILE_ERROR)
  20. {
  21. ErrMsg(ghWndMain, "open data file failed!");
  22. return -1;
  23. }
  24. if(_lread(hFile, &G5MHead, sizeof(G5MHead)) !=sizeof(G5MHead))
  25. {
  26. ErrMsg(ghWndMain, "read data file failed!");
  27. _lclose(hFile);
  28. return -1;
  29. }
  30. if(G5MHead.dateCount <=0 || G5MHead.dataCount <=0
  31. || G5MHead.firstDate <day_start || G5MHead.firstDate >day_start)
  32. if(min_num >=GMinHead.minCount) min_count =0;
  33. else
  34. {
  35. if(min_num+min_count >GMinHead.minCount)
  36. min_count =GMinHead.minCount-min_num;
  37. if(min_count >MAX_GMIN_SENDCOUNT) min_count =MAX_GMIN_SENDCOUNT;
  38. lpGMinData =(LPGMIN_DATA)malloc(sizeof(GMIN_DATA)*min_count);
  39. if(lpGMinData ==NULL)
  40. {
  41. ErrMsg(ghWndMain, "alloc mem failed!");
  42. _lclose(hFile);
  43. return -1;
  44. }
  45. _llseek(hFile, sizeof(GMIN_HEAD)+sizeof(GMIN_DATA)*min_num, SEEK_SET);
  46. if(_lread(hFile, lpGMinData, sizeof(GMIN_DATA)*min_count)
  47. !=min_count*sizeof(GMIN_DATA))
  48. {
  49. ErrMsg(ghWndMain, "read data file failed!");
  50. _lclose(hFile);
  51. return -1;
  52. }
  53. }
  54. _lclose(hFile);
  55. strcpy(WriteBuf, GMIN01_HEAD); 
  56. len =strlen(GMIN01_HEAD);
  57. if(jys ==0) WriteBuf[len] ='Z';
  58. else WriteBuf[len] ='H';
  59. len++;
  60. *((int *)&WriteBuf[len]) =rec_num;
  61. len +=sizeof(int);
  62. *((int *)&WriteBuf[len]) =min_num;
  63. len +=sizeof(int);
  64. *((int *)&WriteBuf[len]) =min_count;
  65. len +=sizeof(int);
  66. if(lpGMinData)
  67. {
  68. memcpy(&WriteBuf[len], lpGMinData, min_count*sizeof(GMIN_DATA));
  69. len +=min_count*sizeof(GMIN_DATA);
  70. free(lpGMinData);
  71. }
  72. for(i =0; i<10; i++)
  73. {
  74. if(jys ==0)
  75. MsgSend("Send GMIN01_DATA:SZ");
  76. else MsgSend("Send GMIN01_DATA:SH");
  77. j =sendto(sdHq, (LPSTR)WriteBuf, len, 0, lpdest,
  78. sizeof(struct sockaddr));
  79. if (j == SOCKET_ERROR) 
  80. {
  81. if (h_errno == WSAEWOULDBLOCK)
  82. continue;
  83. else
  84. ErrMsg(ghWndMain, GetError("sendto()"));
  85. continue;
  86. }
  87. break;
  88. }
  89.                 
  90. return j;
  91. }
  92. // GMIN10_HEAD, jys, zgjg, zdjg, min_num, min_count, (GMinData)...
  93. int UDP_Server_Write_GMin10(int jys, int rec_num, int min_num, struct sockaddr *lpdest)
  94. {
  95. int i, j, len, min_count;
  96. char fileName[128];
  97. GMIN_HEAD GMinHead;
  98. LPGMIN_DATA lpGMinData =NULL;
  99. HFILE hFile;
  100. OFSTRUCT os;
  101. if(jys > 1) return -1;
  102. if(HqTime[jys].fRunning)
  103. {
  104. wsprintf(fileName, "%s\%s.dat", GraphData[jys].szGMinDataPath,
  105. HqData[jys].lpRecData[rec_num].zqdm);
  106. hFile =OpenFile(fileName, &os, OF_SHARE_DENY_NONE|OF_READ);
  107. if(hFile ==HFILE_ERROR)
  108. {
  109. ErrMsg(ghWndMain, "open data file failed!");
  110. return -1;
  111. }
  112. if((int)_lread(hFile, &GMinHead, sizeof(GMIN_HEAD)) !=i)
  113. {
  114. ErrMsg(ghWndMain, "read data file failed!");
  115. _lclose(hFile);
  116. return -1;
  117. }
  118. min_count =MAX_GMIN_SENDCOUNT;
  119. if(min_num >=GMinHead.minCount) min_count =0;
  120. else
  121. {
  122. if(min_num+min_count >GMinHead.minCount)
  123. min_count =GMinHead.minCount-min_num;
  124. lpGMinData =(LPGMIN_DATA)malloc(sizeof(GMIN_DATA)*min_count);
  125. if(lpGMinData ==NULL)
  126. {
  127. ErrMsg(ghWndMain, "alloc mem failed!");
  128. _lclose(hFile);
  129. return -1;
  130. }
  131. _llseek(hFile, sizeof(GMIN_HEAD)+sizeof(GMIN_DATA)*min_num, SEEK_SET);
  132. if(_lread(hFile, lpGMinData, sizeof(GMIN_DATA)*min_count)
  133. !=min_count*sizeof(GMIN_DATA))
  134. {
  135. ErrMsg(ghWndMain, "read data file failed!");
  136. _lclose(hFile);
  137. return -1;
  138. }
  139. }
  140. _lclose(hFile);
  141. strcpy(WriteBuf, GMIN10_HEAD); 
  142. len =strlen(GMIN10_HEAD);
  143. if(jys ==0) WriteBuf[len] ='Z';
  144. else WriteBuf[len] ='H';
  145. len++;
  146. *((int *)&WriteBuf[len]) =rec_num;
  147. len +=sizeof(int);
  148. *((int *)&WriteBuf[len]) =min_num;
  149. len +=sizeof(int);
  150. *((int *)&WriteBuf[len]) =min_count;
  151. len +=sizeof(int);
  152. *((float *)&WriteBuf[len]) =(float)GMinHead.zgjg;
  153. len +=sizeof(float);
  154. *((float *)&WriteBuf[len]) =(float)GMinHead.zdjg;
  155. len +=sizeof(float);
  156. *((long *)&WriteBuf[len]) =GMinHead.zglc;
  157. len +=sizeof(long);
  158. //*((long *)&WriteBuf[len]) =GMinHead.zdlc;
  159. //len +=sizeof(long);
  160. if(lpGMinData)
  161. {
  162. memcpy(&WriteBuf[len], lpGMinData, min_count*sizeof(GMIN_DATA));
  163. len +=min_count*sizeof(GMIN_DATA);
  164. free(lpGMinData);
  165. }
  166. }
  167. else
  168. {
  169. strcpy(WriteBuf, NOTRUN_HEAD);
  170. len =strlen(NOTRUN_HEAD);
  171. }
  172. // try 10 times
  173. for(i =0; i<10; i++)
  174. {
  175. if(jys ==0)
  176. MsgSend("Send GMIN10_DATA");
  177. else MsgSend("Send GMIN10_DATA");
  178. j =sendto(sdHq, (LPSTR)WriteBuf, len, 0, lpdest,
  179. sizeof(struct sockaddr));
  180. if (j == SOCKET_ERROR) 
  181. {
  182. if (h_errno == WSAEWOULDBLOCK)
  183. continue;
  184. else
  185. ErrMsg(ghWndMain, GetError("sendto()"));
  186. continue;
  187. }
  188. break;
  189. }
  190. return j;
  191. }