// 关闭server void CWordServer::stopServices() { m_netServer.Shutdown(); dSleep(2000); CServerRoot::stopServices(); // 各种底层的shutdown CLog::shutdown(); }
/* asqlFreeDbfDes() * *************************************************************************/ _declspec(dllexport) TS_CLIENT_CURSOR *asqlFreeDbfDes(TS_CLIENT_CURSOR *tscc, \ void *df, \ EXCHNG_BUF_INFO *exbuf ) { TS_COM_PROPS tscp; TS_CLIENT_CURSOR *tscpLast, *tscpHead; char lpszResponse[4096]; memset(&tscp, 0, sizeof(TS_COM_PROPS)); tscpLast = NULL; tscpHead = tscc; while( tscc != NULL ) { if( tscc->p == (void *)df ) goto agdr_dfTrueD; tscpLast = tscc; tscc = tscc->pNext; } df = NULL; agdr_dfTrueD: if( df == NULL ) { tscp.packetType = 'R'; tscp.msgType = 'E'; tscp.len = 0; tscp.lp = -1; memcpy(lpszResponse, &tscp, sizeof(TS_COM_PROPS)); SrvWriteExchngBuf(exbuf, lpszResponse, sizeof(TS_COM_PROPS)); return tscpHead; } if( wmtDbfIsLock((dFILE *)df) == 1 ) { //if it is locked, unlock it. wmtDbfUnLock((dFILE *)df); } dSleep((dFILE *)df); if( tscpLast != NULL ) { tscpLast->pNext = tscc->pNext; } else { tscpHead = tscc->pNext; } free( tscc ); tscp.packetType = 'R'; tscp.msgType = 'D'; tscp.len = 0; tscp.lp = 0; memcpy(lpszResponse, &tscp, sizeof(TS_COM_PROPS)); SrvWriteExchngBuf(exbuf, lpszResponse, sizeof(TS_COM_PROPS)); return tscpHead; } //end of asqlFreeDbfDes()
/* **------------------------------------------------------------------------- ** dbftotal() ** add table stored in dfs into table stored in dft. **------------------------------------------------------------------------*/ _declspec(dllexport) int dbftotal(char *szDft, char *szDfs) { dFILE *dft, *dfs; dfs = dAwake( szDfs, DOPENPARA ); if( dfs == NULL ) { return -1; } dft = dAwake( szDft, DOPENPARA ); if( dft == NULL ) { dSleep( dfs ); return -2; } dTableSum(dft, dfs); dSleep( dfs ); dSleep( dft ); return 1; } //end of dbftotal()
/* asqlGetDbfDes() * error: return: tscc *************************************************************************/ _declspec(dllexport) TS_CLIENT_CURSOR *asqlGetDbfDes(TS_CLIENT_CURSOR *tscc, LPSTR szDbName, LPSTR szTbName, \ EXCHNG_BUF_INFO *exbuf) { char buf[MAXPATH]; dFILE *df; TS_CLIENT_CURSOR *tscc1; TS_COM_PROPS tscp; char lpszResponse[4096]; memset(&tscp, 0, sizeof(TS_COM_PROPS)); if( szDbName == NULL ) szDbName = ""; if( szDbName[0] != '\0' ) { char *sz; sz = GetCfgKey(csuDataDictionary, "DATABASE", szDbName, "PATH"); if( sz != NULL ) { strZcpy(buf, sz, MAXPATH); beSurePath(buf); } else buf[0] = '\0'; } else { strcpy(buf, asqlConfigEnv.szAsqlFromPath); } if( szTbName[1] == ':' || szTbName[0] == '\\' ) strcpy(buf, szTbName); else strncat(buf, szTbName, MAXPATH-strlen(buf)); dsetbuf(0); if( szDbName[0] != '\0' ) { strcpy(lpszResponse, szDbName); strcat(lpszResponse, "*"); strcat(lpszResponse, buf); } else { strcpy(lpszResponse, buf); } df = dAwake(lpszResponse, DOPENPARA); if( df == NULL ) { tscp.packetType = 'R'; tscp.msgType = 'E'; tscp.len = 0; tscp.lp = -1; memcpy(lpszResponse, &tscp, sizeof(TS_COM_PROPS)); SrvWriteExchngBuf(exbuf, lpszResponse, sizeof(TS_COM_PROPS)); return tscc; } //get the right string //check wmtDbfLock(df); tscp.packetType = 'R'; tscp.msgType = 'D'; tscp.len = (short)(min(df->headlen,4096-sizeof(TS_COM_PROPS))); tscp.lp = (long)df; memcpy(lpszResponse, &tscp, sizeof(TS_COM_PROPS)); lseek(df->fp, 0, SEEK_SET); read(df->fp, lpszResponse+sizeof(TS_COM_PROPS), tscp.len); //set recnum to 0 *(long *)&lpszResponse[sizeof(TS_COM_PROPS)+4] = 0; //clear firstDelRec *(long *)&lpszResponse[sizeof(TS_COM_PROPS)+12] = 0; wmtDbfUnLock(df); tscc1 = malloc(sizeof(TS_CLIENT_CURSOR)); if( tscc1 == NULL ) { dSleep(df); tscp.msgType = 'E'; SrvWriteExchngBuf(exbuf, lpszResponse, 4096); return tscc; } tscc1->pNext = tscc; tscc1->p = df; tscc1->pType = 1; SrvWriteExchngBuf(exbuf, lpszResponse, 4096); return tscc1; } //end of asqlGetDbfDes()