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

金融证券系统

开发平台:

Visual C++

  1. #include <windows.h>
  2. #include <windowsx.h>
  3. #include "monitor.h"
  4. extern BOOL GetInitString(LPSTR, LPSTR, LPSTR);
  5. extern BOOL ErrMsg(HWND, LPSTR);
  6. MONITOR Monitor;
  7. unsigned int StartNo;
  8. typedef struct tag_HQ_USER
  9. {
  10. unsigned int id;
  11. char pass[6+1];
  12. char priv;
  13. }USER,*LPUSER;
  14. LPUSER User=NULL;
  15. int user_rec_num =0;
  16. BOOL MonitorInit()
  17. {
  18. char temp[200],tmp[100];
  19. char MonitorBuf[100];
  20.     int i;
  21. memset(&Monitor.File,0,sizeof(DBF_DATA));
  22. Monitor.File.hf =-1;
  23. if(GetInitString("MONITOR", "RUN", temp))
  24. {
  25. if(temp[0] =='N' || temp[0] =='n')
  26. {
  27. Monitor.IsRun =FALSE;
  28. return TRUE;
  29. }
  30. else
  31. Monitor.IsRun=TRUE;
  32. }
  33. else
  34. {
  35. Monitor.IsRun=FALSE;
  36. return TRUE;
  37. }
  38. if(!GetInitString("MONITOR","FILE",temp))
  39. {
  40. ErrMsg(NULL,"Can not find file item in init file!");
  41. Monitor.IsRun=FALSE;
  42. return FALSE;
  43. }
  44.     
  45. if(access(temp,_S_IREAD|_S_IWRITE) <0)
  46. {
  47. wsprintf(tmp, "can not read %s:n %s",
  48. (LPSTR)"MONITORFILE", (LPSTR)temp);
  49. ErrMsg(NULL, tmp);
  50. Monitor.IsRun=FALSE;
  51. return FALSE;
  52. }
  53. Monitor.File.hf=OpenDbfBase(temp,O_RDWR);
  54. if (Monitor.File.hf==-1)
  55. {
  56. wsprintf(tmp, "can not open %s:n %s",
  57. (LPSTR)"COMMFILE", (LPSTR)&temp[0]);
  58. ErrMsg(NULL, tmp);
  59. return FALSE;
  60. }
  61. if (InitBase(Monitor.File.hf,&Monitor.File.dbfStruct,
  62. &Monitor.File.fldStruct,&Monitor.File.fldCount)
  63. !=SUCCEED)
  64. {
  65. wsprintf(tmp, "can not init %s:n %s",
  66. (LPSTR)"COMMFILE", (LPSTR)temp);
  67. ErrMsg(NULL, temp);
  68. return FALSE;
  69. }
  70. user_rec_num =*(int *)(Monitor.File.dbfStruct.recnum);
  71. User =GlobalAllocPtr(GHND,(DWORD)(user_rec_num*sizeof(USER)));
  72. if(User ==NULL)
  73. {
  74. ErrMsg(NULL, "Can not alloc user info memory");
  75. return FALSE;
  76. }
  77. for(i=0;i<user_rec_num;i++)
  78. {
  79. ReadRecord(Monitor.File.hf,i+1L,*(short *)Monitor.File.dbfStruct.hlen,
  80. *(short *)Monitor.File.dbfStruct.rlen,MonitorBuf);
  81. FldToString(MonitorBuf,&Monitor.File.fldStruct[fld_CODE],temp);
  82. User[i].id =atoi(temp);
  83. if(i==0)
  84. StartNo=User[0].id;
  85. FldToString(MonitorBuf,&Monitor.File.fldStruct[fld_PASS],temp);
  86. strncpy(User[i].pass,temp,6);
  87. User[i].priv =MonitorBuf[*(short*)Monitor.File.fldStruct[fld_PRIV].offset];   
  88. }
  89. if(!GetInitString("MONITOR","CHECKPOINT",temp))
  90. {
  91. Monitor.CheckPoint=5;
  92. }
  93.     else
  94. {
  95. Monitor.CheckPoint=atoi(temp);
  96. }
  97. return TRUE;
  98. }
  99. BOOL MonitorExit()
  100. {
  101. if(Monitor.File.hf!=-1)
  102. {
  103. CloseDbf(Monitor.File.hf);
  104. if(Monitor.File.fldStruct)
  105. GlobalFreePtr(Monitor.File.fldStruct);
  106. }
  107. if(User!=NULL)
  108. GlobalFreePtr(User);
  109. return TRUE;
  110. }
  111. /*
  112. int RegisterUser(char *UserId,char *Pass)
  113. {
  114. int pos=1,priv,lock,recnum;
  115. char pass[7],userid[7],temp[10];
  116. char MonitorBuf[100];
  117. if(Monitor.File.hf ==-1) 
  118. return LOGIN_SYS_ERR;
  119. pos=atoi(UserId) - StartNo +1;
  120. if(pos>*(int *)(Monitor.File.dbfStruct.recnum)+1)
  121. recnum =GetRecNum(Monitor.File.hf);
  122. else
  123. recnum =*(int *)(Monitor.File.dbfStruct.recnum);
  124. if(pos<=recnum)
  125. {
  126. ReadRecord(Monitor.File.hf,pos,*(short *)Monitor.File.dbfStruct.hlen,
  127. *(short *)Monitor.File.dbfStruct.rlen,MonitorBuf);
  128. FldToString(MonitorBuf,&Monitor.File.fldStruct[fld_CODE],userid);
  129. }
  130. else
  131. userid[0]=0;
  132. if(strncmp(userid,UserId,6))
  133. {
  134. pos =1;
  135. do
  136. {
  137. ReadRecord(Monitor.File.hf,pos,*(short *)Monitor.File.dbfStruct.hlen,
  138. *(short *)Monitor.File.dbfStruct.rlen,MonitorBuf);
  139. FldToString(MonitorBuf,&Monitor.File.fldStruct[fld_CODE],userid);
  140. if(!(strncmp(userid,UserId,6)))
  141. break;
  142. else
  143. {
  144. if(pos>recnum)
  145. {
  146. return LOGIN_NO_THIS_ID;
  147. }
  148. }
  149. ShoutBlockingHook();
  150. pos++;
  151. }while(strncmp(userid,UserId,6));
  152. }
  153. FldToString(MonitorBuf,&Monitor.File.fldStruct[fld_PASS],pass);
  154. FldToString(MonitorBuf,&Monitor.File.fldStruct[fld_TIME],temp);
  155. lock=MonitorBuf[*(short*)Monitor.File.fldStruct[fld_LOCK].offset];   
  156. if(lock=='T')
  157. return LOGIN_LOCKED;
  158. priv=MonitorBuf[*(short*)Monitor.File.fldStruct[fld_PRIV].offset];   
  159.     if(atoi(temp)==0&&priv!='9')
  160. return LOGIN_NO_TIME;
  161. if(atoi(temp)==-1&&priv!='9')
  162. return LOGIN_NO_THIS_ID;
  163. if(strncmp(Pass,pass,6))
  164. return LOGIN_NO_PRIV;
  165. else
  166. return pos;
  167. }
  168. */
  169. int RegisterUser(char *UserId,char *Pass)
  170. {
  171. int pos=0;
  172. unsigned int ReqId;
  173. if(Monitor.File.hf ==-1) 
  174. return LOGIN_SYS_ERR;
  175. ReqId =atoi(UserId);
  176. pos=ReqId - StartNo;
  177. if(pos>=user_rec_num)
  178. {
  179. pos =0;
  180. for(;;)
  181. {
  182. if(User[pos].id==ReqId)
  183. break;
  184. pos++;
  185. if(pos>=user_rec_num)
  186. return LOGIN_NO_THIS_ID;
  187. }
  188. }
  189. else
  190. {
  191. if(User[pos].id!=ReqId)
  192. {
  193. pos =0;
  194. for(;;)
  195. {
  196. if(User[pos].id==ReqId)
  197. break;
  198. pos++;
  199. if(pos>=user_rec_num)
  200. return LOGIN_NO_THIS_ID;
  201. }
  202. }
  203. }
  204. if(strncmp(Pass,User[pos].pass,strlen(User[pos].pass)))
  205. return LOGIN_NO_PRIV;
  206. else
  207. {
  208. pos++;
  209. return pos;
  210. }
  211. }
  212. int WriteUserStatus(int Pos,int Utime,int Lstatus,char * ReqHead)
  213. {
  214. char temp[20];
  215. char MonitorBuf[100];
  216. int rtime,priv;
  217. if(Monitor.File.hf ==-1) 
  218. return 0;
  219. memset(MonitorBuf,' ',100);
  220. ReadRecord(Monitor.File.hf,Pos,*(short *)Monitor.File.dbfStruct.hlen,
  221. *(short *)Monitor.File.dbfStruct.rlen,MonitorBuf);
  222. FldToString(MonitorBuf,&Monitor.File.fldStruct[fld_TIME],temp);
  223. rtime=atoi(temp);
  224. rtime-=Utime;
  225. if(rtime<0) rtime=0;
  226. sprintf(temp,"%d",rtime);
  227. StringToFld(MonitorBuf,Monitor.File.fldStruct[fld_TIME],temp);
  228. MonitorBuf[*(short*)Monitor.File.fldStruct[fld_LSTA].offset]=Lstatus;
  229. MonitorBuf[*(short*)Monitor.File.fldStruct[fld_USED].offset]='T';
  230. priv=MonitorBuf[*(short*)Monitor.File.fldStruct[fld_PRIV].offset];
  231. if(priv=='9')
  232. rtime=600;
  233. //strncpy(temp,ReqHead,strlen(ReqHead));
  234. //StringToFld(MonitorBuf,Monitor.File.fldStruct[fld_ADDR],temp);
  235. WriteRecord(Monitor.File.hf,Pos,*(short *)Monitor.File.dbfStruct.hlen,
  236. *(short *)Monitor.File.dbfStruct.rlen,MonitorBuf);
  237. return rtime;
  238. }
  239. char ReadLockControl(int Pos)
  240. {
  241. char MonitorBuf[100];
  242. if(Monitor.File.hf ==-1) return 0;
  243. ReadRecord(Monitor.File.hf,Pos,*(short *)Monitor.File.dbfStruct.hlen,
  244. *(short *)Monitor.File.dbfStruct.rlen,MonitorBuf);
  245. return MonitorBuf[*(short*)Monitor.File.fldStruct[fld_LOCK].offset];
  246. }
  247. int SetUserEnv(int Pos,TCP_FRAME_HQ_ENV * lpPara,int len)
  248. {
  249. char temp[10];
  250. char MonitorBuf[100];
  251. if(Monitor.File.hf ==-1) 
  252. return SET_SYS_ERROR;
  253. if(len!=sizeof(TCP_FRAME_HQ_ENV))
  254. return SET_DATA_ERROR;
  255. memset(MonitorBuf,' ',100);
  256. ReadRecord(Monitor.File.hf,Pos,*(short *)Monitor.File.dbfStruct.hlen,
  257. *(short *)Monitor.File.dbfStruct.rlen,MonitorBuf);
  258. FldToString(MonitorBuf,&Monitor.File.fldStruct[fld_PASS],temp);
  259.     if(strncmp(temp,lpPara->pwd,6)!=0)
  260. return SET_PWD_ERROR;
  261. StringToFld(MonitorBuf,Monitor.File.fldStruct[fld_PASS],lpPara->newpwd);
  262. WriteRecord(Monitor.File.hf,Pos,*(short *)Monitor.File.dbfStruct.hlen,
  263. *(short *)Monitor.File.dbfStruct.rlen,MonitorBuf);
  264. if(Pos>0 &&Pos <=user_rec_num)
  265. strncpy(User[Pos-1].pass ,lpPara->newpwd,strlen(lpPara->newpwd));
  266. return SET_SUCC;
  267. }