⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 csgp.c

📁 公司业务而自己写的网关通讯程序,网关是平台的.不过对OCI有兴趣的不妨看看. Oracle Oci select exec update 多线程 IVR 网关通讯 linux 日志文件操作
💻 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 + -