📄 csgp.c
字号:
//#include <pthread.h>
#include <oci.h> #include <signal.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include "csgpapi.h"
#include "log.h"
#include "csgp.h"
#include "db.h"
extern sword checkerr (OCIError *errhp, sword status);int check(int rc);extern OCIError *errhp;extern OCIEnv *envhp;#define NUM_GATEWAYTHREADS 5#define NUM_DBOPTHREADS 2
int running = 1;
void ouch(int sig){
if(running){ //Ctrl+C Press
running = 0;
INFO("System ShutDown....");
}}
void ReadThread(void* argList)
{
int my_number = (int)argList; char ctrlMsg[40];
char subCode[5];
char contenetMsg[1024],buffer[4096];
while(running){
int MsgLen = 1024;
int rc = check(ReadSrvReq(ctrlMsg, subCode, contenetMsg, &MsgLen, 60));
if( rc == 0){
if(contenetMsg[0] == 's'){
memset(buffer,0,4096);
int rtnv = Select(contenetMsg,buffer);
if(!rtnv){
rc=check(SendSrvResp(ctrlMsg, buffer, strlen(buffer)));
if(rc == 0)
{
INFO(contenetMsg);
OK(contenetMsg);
continue;
}else{
SENDERR(contenetMsg);
}
}else{
rc=check(SendSrvResp(ctrlMsg, "#ERROR", 6));
ERR(contenetMsg);
}
}else{
if(!exec(contenetMsg)){
rc=check(SendSrvResp(ctrlMsg, buffer, strlen(buffer)));
if(rc == 0)
{
OK(contenetMsg);
continue;
}else{
SENDERR(contenetMsg);
}
}else{
rc=check(SendSrvResp(ctrlMsg, "#ERROR", 6));
ERR(contenetMsg);
}
}
}
}
}
int check(int rc){
switch(rc) {
case CSGP_OK:
break;
case CSGP_TIMEOUT:
INFO("Time out.");
break;
case CSGP_ERR_READCONFIGFILE:
INFO("Cannot read csgpini.ini file.");
break;
case CSGP_ERR_CONFIGPARA:
INFO("Configuration parameter(s) error in csgpini.ini");
break;
case CSGP_ERR_CONNECTFAIL:
INFO("Connection Failed!");
break;
case CSGP_ERR_CREATETHREAD:
INFO("Cannot create thread(s).");
break;
case CSGP_ERR_SENDSRVRESP:
INFO("Send Response Error.");
break;
case CSGP_ERR_RECVBUFFERSIZE:
INFO("Buffer Size Error.");
break;
case CSGP_ERR_LOGIN:
INFO("Cannot logon.");
break;
default:
INFO("csgpini.ini Unknown error.");
}
return rc;
}
/*
void ReadThread(void* argList)
{
int my_number = (int)argList;// printf("Read Thread %d StartUp!\n",my_number);
while(running){
int rtnv;
switch(my_number%4){
case 0:
{
sleep(1);
INFO("Test INSERT");
rtnv = exec("insert into t_test(id,name,status) values(1000,'super man',sysdate)");
if(rtnv){
INFO("INSERT ERR");
}
}
break;
case 1:
{
sleep(2);
INFO("Test UPDATE");
rtnv = exec("update t_test set name='super man2'");
if(rtnv){
INFO("UPDATE ERR");
}
}
break;
case 2:
{
sleep(3);
INFO("Test SELECT");
char buf123[2048];
memset(buf123,0,1024);
rtnv = Select("select * from t_test",buf123);
if(rtnv){
INFO("SELECT ERR");
}else{
INFO(buf123);
}
}
break;
case 3:
{
sleep(2);
INFO("Test DELETE");
rtnv = exec("delete from t_test");
if(rtnv){
INFO("DELETE ERR");
}
}
break;
}
}
}
*/
int main(int argc, char* argv[])
{
char buf[128];
INFO("Starting GateWay Daemon.....");
INFO("Init Oracle OCI ConnectionPool......");
//-----------------------Init csgplib-----------------------------
if(initpool()){
INFO("DB ConnectionPool Init Error,System EXIT!");
exit(EXIT_FAILURE);
}else{
INFO("DB ConnectionPool Init Complete!");
}
INFO("Init GateWay......");
if(initcsgplib()){
INFO("GateWay Init Error,System EXIT!");
exit(EXIT_FAILURE);
}else{
INFO("GateWay Init Complete!");
}
//----------------------process Ctrl+C break----------------------------------
struct sigaction act; act.sa_handler = ouch; sigemptyset(&act.sa_mask); act.sa_flags = 0;
sigaction(SIGINT, &act, 0); sigaction(SIGHUP, &act, 0);
{ OCIThreadId *thrid[NUM_GATEWAYTHREADS]; OCIThreadHandle *thrhp[NUM_GATEWAYTHREADS]; INFO("System Running...");
OCIThreadProcessInit (); checkerr (errhp, OCIThreadInit (envhp, errhp));
int i; for (i = 0; i < NUM_GATEWAYTHREADS; ++i) { checkerr (errhp, OCIThreadIdInit (envhp, errhp, &thrid[i])); checkerr (errhp, OCIThreadHndInit (envhp, errhp, &thrhp[i])); } for (i = 0; i < NUM_GATEWAYTHREADS; ++i) { /* Inserting into EMP table */ checkerr (errhp, OCIThreadCreate (envhp, errhp, ReadThread, (dvoid *) i, thrid[i], thrhp[i])); } for (i = 0; i < NUM_GATEWAYTHREADS; ++i) { checkerr (errhp, OCIThreadJoin (envhp, errhp, thrhp[i])); checkerr (errhp, OCIThreadClose (envhp, errhp, thrhp[i])); checkerr (errhp, OCIThreadIdDestroy (envhp, errhp, &(thrid[i]))); checkerr (errhp, OCIThreadHndDestroy (envhp, errhp, &(thrhp[i]))); sprintf(buf,"Gateway Thread %d End.",i);
INFO(buf);
} checkerr (errhp, OCIThreadTerm (envhp, errhp)); }
closepool(); //--------------------------------End------------------------------------------------- INFO("ShutDown GateWay Daemon!");
exit(EXIT_SUCCESS);}
int initcsgplib(){
INFO("Init...");
int rc = CSGP_ReadConf("csgpini.ini");
if(rc != 0)
{
switch(rc) {
case CSGP_TIMEOUT:
INFO("Read csgpini.ini Time out.");
break;
case CSGP_ERR_READCONFIGFILE:
INFO("Cannot read csgpini.ini file.");
break;
case CSGP_ERR_CONFIGPARA:
INFO("Configuration parameter(s) error in csgpini.ini");
break;
case CSGP_ERR_CREATETHREAD:
INFO("Cannot create thread(s).");
break;
case CSGP_ERR_LOGIN:
INFO("Cannot logon.");
break;
default:
INFO("csgpini.ini Unknown error.");
}
return rc;
}
else
{
INFO("Load csgpini.ini Success!");
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -