📄 tux_srv.c
字号:
/***************************
tux_srv.c
***************************
/*+****************************************************************
**********
*
*
* COPYRIGHT (c) 1997, 2000 BY
*
* DIGITAL EQUIPMENT CORPORATION, MAYNARD, MASSACHUSETTS.
*
* ALL RIGHTS RESERVED.
*
*
*
* THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND
COPIED *
* ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND
WITH THE *
* INCLUSION OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY
OTHER *
* COPIES THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE
TO ANY *
* OTHER PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS
HEREBY *
* TRANSFERRED.
*
*
*
* THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT
NOTICE *
* AND SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL
EQUIPMENT *
* CORPORATION.
*
*
*
* DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY
OF ITS *
* SOFTWARE ON EQUIPMENT WHICH IS NOT SUPPLIED BY DIGITAL.
*
*
*
*
*
*******************************************************************
*******-*/
/*
*
*
* Modification history:
*
*
* 08/01/2002 Andrew Bond, HP
* - Conversion to run under Linux
*
*/
#include <errno.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/time.h>
#include <math.h>
#include <oci.h>
#include <ocidfn.h>
#include <ociapr.h>
#include <tpccstruct.h>
#include <oracle_db8.h>
#include <tpccapi.h>
#include <tpccerr.h>
#include <tpcc.h>
#include <atmi.h>
#ifdef FFE_DEBUG
# include <crtdbg.h>
#endif
/* dbproc pointer for db connection */
DBContext DBC;
static FILE *fpLog = NULL; /* pointer to log file */
FILE *LogFile;
FILE *MyLogFile;
#define MAXNUMDIGITS 10
char szTpccLogPath[FILENAMESIZE];
char szNumber[MAXNUMDIGITS];
/* FUNCTION: void DELILog( pDeliveryData pDelivery )
*
* PURPOSE: Writes the delivery results to the delivery log file.
*
* ARGUMENTS: LPSYSTEMTIME lpBegin Local delivery start time.
* pDeliveryData pDelivery Delivery data to be written.
*
* RETURNS: None
*
* COMMENTS: None
*
*/
void DELILog( pDeliveryData pDelivery )
{
struct tm start;
struct tm end;
time_t endt;
unsigned delta_time_seconds;
unsigned delta_time_milliseconds;
pDelivery->delta_time = ((pDelivery->tend.tv_sec - pDelivery->tbegin.tv_sec) * 1000) +
(int)ceil((pDelivery->tend.tv_usec - pDelivery->tbegin.tv_usec)/1000);
memcpy( &start, localtime( &pDelivery->tbegin.tv_sec), sizeof(start ));
memcpy( &end, localtime( &pDelivery->tend.tv_sec), sizeof( end));
fprintf( fpLog,"%4.4d/%2.2d/%2.2d,"
"%2.2d:%2.2d:%2.2d:%3.3d,"
"%2.2d:%2.2d:%2.2d:%3.3d,"
"%8.8d,"
"%5.5d,%2.2d,"
"%4.4d,%4.4d,%4.4d,%4.4d,%4.4d,"
"%4.4d,%4.4d,%4.4d,%4.4d,%4.4d\r\n",
1900+start.tm_year, start.tm_mon+1, start.tm_mday,
start.tm_hour, start.tm_min, start.tm_sec, pDelivery->tbegin.tv_usec/1000,
end.tm_hour, end.tm_min, end.tm_sec, pDelivery->tend.tv_usec/1000,
pDelivery->delta_time,
pDelivery->w_id, pDelivery->o_carrier_id,
pDelivery->o_id[0], pDelivery->o_id[1],
pDelivery->o_id[2], pDelivery->o_id[3],
pDelivery->o_id[4], pDelivery->o_id[5],
pDelivery->o_id[6], pDelivery->o_id[7],
pDelivery->o_id[8], pDelivery->o_id[9] );
fflush(fpLog);
return;
}
/*
**++
** FUNCTION NAME: tpsvrinit
**--
*/
int tpsvrinit( int argc, char *argv[] )
{
BOOL bLog;
/* stg next two lines not needed for v6 web ora tux app code
StartupData Startup;
pStartupData pStartup = &Startup; */
int status;
char szTmp[FILENAMESIZE];
LoginData login;
/* to avoid compiler errors */
argc = argc;
argv = argv;
/* used for debugging the server code */
/*
sleep(30000);
*/
userlog("Starting tpcc server");
/* Get login data from file settings */
status = GetConfigValue("Server", (char *)&szTmp);
if ( status != ERROR_SUCCESS )
return ERR_CANT_FIND_SERVER_VALUE;
strcpy(login.szServer, szTmp);
status = GetConfigValue("Database", (char *)&szTmp);
if ( status != ERROR_SUCCESS )
return ERR_CANT_FIND_DATABASE_VALUE;
strcpy(login.szDatabase, szTmp);
status = GetConfigValue("User", (char *)&szTmp);
if ( status != ERROR_SUCCESS )
return ERR_CANT_FIND_USER_VALUE;
strcpy(login.szUser, szTmp);
status = GetConfigValue("Password", (char *)&szTmp);
if ( status != ERROR_SUCCESS )
return ERR_CANT_FIND_PASSWORD_VALUE;
strcpy(login.szPassword, szTmp);
/* Get Path registry value */
status = GetConfigValue("PATH", (char *)&szTmp);
if (status != ERROR_SUCCESS )
return ERR_CANT_FIND_PATH_VALUE;
strcpy (szTpccLogPath, szTmp);
if (ERROR_SUCCESS == status)
{
/* set application name */
/* strcpy( pStartup->Login.databaseLogin.szApplication,"TUX_SRV" ); */
TPCCStartupDB();
/* populate LoginData login structure like in tpcc_fct.c */
/* Server, Database, User and Password already populated into login above */
login.w_id = 0;
login.ld_id = 0;
login.pCC = 0;
login.szApplication[0] = '\0';
strcpy(szTmp, szTpccLogPath);
strcat(szTmp, "delilog");
itoa(getpid(), szNumber);
strcat(szTmp, szNumber);
fpLog = fopen(szTmp, "wb");
if ( NULL == fpLog )
return ERR_CANNOT_CREATE_RESULTS_FILE;
status = TPCCConnectDB( (OraContext **)&DBC, &login );
if(ERR_DB_SUCCESS != status)
{
TPCCErr( "tpsvrinit : Error logging into db." );
return ERR_DB_ERROR;
}
TPCCErr( "Finished TPCCConnectDB, dbprocptr = %8X\r\n", DBC );
}
else
{
TPCCErr("tpsvrinit : could not get configuration settings");
}
return (0);
}
/*
**++
** FUNCTION NAME: tpsvrdone
**--
*/
void tpsvrdone(void)
{
TPCCShutdownDB();
return;
}
/*
**++
** FUNCTION NAME: dy_transaction
**--
*/
void dy_transaction( TPSVCINFO *dy_wksp )
{
struct timeval tend;
struct timezone tz;
pDeliveryData ptr;
ptr = (pDeliveryData)dy_wksp->data;
ptr->status = TPCCDeliveryDB( DBC, ptr );
gettimeofday(&ptr->tend, &tz);
/* update log */
DELILog( ptr );
if(ERR_DB_ERROR != ptr->status)
tpreturn(TPSUCCESS, ptr->status, dy_wksp->data, dy_wksp->len,0);
else
tpreturn(TPFAIL, ptr->status, dy_wksp->data, 0L, 0);
}
/*
**++
** FUNCTION NAME: no_transaction
**--
*/
void no_transaction( TPSVCINFO *no_wksp )
{
pNewOrderData ptr;
ptr = (pNewOrderData)no_wksp->data;
ptr->status = TPCCNewOrderDB( DBC, ptr );
if(ERR_DB_ERROR != ptr->status)
tpreturn(TPSUCCESS, ptr->status, no_wksp->data, no_wksp->len,
0);
else
tpreturn(TPFAIL, ptr->status, no_wksp->data, 0L, 0);
}
/*
**++
** FUNCTION NAME: os_transaction
**--
*/
void os_transaction( TPSVCINFO *os_wksp )
{
pOrderStatusData ptr;
ptr = (pOrderStatusData)os_wksp->data;
ptr->status = TPCCOrderStatusDB( DBC, ptr );
if(ERR_DB_ERROR != ptr->status)
tpreturn(TPSUCCESS, ptr->status, os_wksp->data, os_wksp->len,0);
else
tpreturn(TPFAIL, ptr->status, os_wksp->data, 0L, 0);
}
/*
**++
** FUNCTION NAME: pt_transaction
**--
*/
void pt_transaction( TPSVCINFO *pt_wksp )
{
pPaymentData ptr;
ptr = (pPaymentData)pt_wksp->data;
ptr->status = TPCCPaymentDB( DBC, ptr );
if(ERR_DB_ERROR != ptr->status)
tpreturn(TPSUCCESS, ptr->status, pt_wksp->data,sizeof(PaymentData), 0);
else
tpreturn(TPFAIL, ptr->status, pt_wksp->data, 0L, 0);
}
/*
**++
** FUNCTION NAME: sl_transaction
**--
*/
void sl_transaction( TPSVCINFO *sl_wksp )
{
pStockLevelData ptr;
ptr = (pStockLevelData)sl_wksp->data;
ptr->status = TPCCStockLevelDB( DBC, ptr );
if(ERR_DB_ERROR != ptr->status)
tpreturn(TPSUCCESS, ptr->status, sl_wksp->data, sl_wksp->len,0);
else
tpreturn(TPFAIL, ptr->status, sl_wksp->data, 0L, 0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -