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

📄 tpipe.c

📁 使用python调用tuxedo服务的代码, 中间以 c 调用tuxedo客户端的atmi接口来作为连接代理
💻 C
字号:
/*手机邮箱查询用户主资费接口服务程序

*/

#include <stdio.h>
#include <string.h>
#include <errno.h>

#include <time.h>
#include <sys/time.h>

#include <fml.h>
#include <fml32.h>
#include <atmi.h>

#define GPARM32_0               0x0a000c80    /* number: 3200  type: string */
#define SEND_PARMS_NUM32        0x0a000ce4    /* number: 3300  type: string */
#define RECP_PARMS_NUM32        0x0a000ce6    /* number: 3302  type: string */
#define SVC_ERR_NO32            0x0a000cf8    /* number: 3320  type: string */
#define SVC_ERR_MSG32           0x0a000cf9    /* number: 3321  type: string */
#define F_ServiceName32         0x0a000d03    /* number: 3331  type: string */
#define F_Wsnaddr32             0x0a000d04    /* number: 3331  type: string */


char *cal_time(char *s, struct timeval t1, struct timeval t2)
{
    if(t2.tv_usec<t1.tv_usec)
            sprintf(s, "%ld.%06ld",
         t2.tv_sec-t1.tv_sec-1, t2.tv_usec-t1.tv_usec+1000000);
    else
            sprintf(s, "%ld.%06ld", t2.tv_sec-t1.tv_sec, t2.tv_usec-t1.tv_usec);
    return s;
}

int getParm(FBFR32 *fbuf, int col, int row, char *r, int size)
{
    unsigned long l;
    l = size;
    memset(r, 0, l);
    if(col == -1)
        return Fget32(fbuf, SVC_ERR_NO32, 0, r, &l);
    else if(col == -2)
        return Fget32(fbuf, SVC_ERR_MSG32, 0, r, &l);
    if(col > 50)
        return Fget32(fbuf, col, row, r, &l);
    else
        return Fget32(fbuf, GPARM32_0+col, row, r, &l);
}

void t_call_back(int sockid, char *clientip, int clientport, void *parm, int servsockid)
{
    FILE *fr, *fw, *fw1;
    FBFR32  *fb, *fbs;
    long rcvlen;
    int ret, my_tperrno;
    char buf[1024], eno[7], emsg[2000];
    char service_name[30];
    char wsnaddr[50];
    struct timeval tp1, tp2;
    int tpret;

    printf("new client [%s:%d]\n", clientip, clientport);

    memset(buf, 0, sizeof(buf));

    fr = fdopen(sockid, "rb");
    if(fr == NULL){
        printf("fdopen failed errno:%d\n", errno);
        return;
    }
    fw = fdopen(sockid, "wb");
    if(fw == NULL){
        printf("fdopen wb failed errno:%d\n", errno);
        return;
    }
    

    while(1){
        gettimeofday(&tp1, NULL);
        fb = (FBFR32 *)tpalloc("FML32", NULL, 1000);
        ret = Fread32(fb, fr);
        if(ret == -1){
            F_error32(buf);
            tpfree((char *)fb);
            printf("Fread32 failed [%s]\n", buf);
            break;
        }
        getParm(fb, F_ServiceName32, 0, service_name, sizeof(service_name));
        getParm(fb, F_Wsnaddr32, 0, wsnaddr, sizeof(wsnaddr));
        rcvlen=Fsizeof32(fbs);
        if(strlen(wsnaddr) > 10)
            putenv(wsnaddr);
        fbs = (FBFR32 *)tpalloc("FML32", NULL, 1000);
        tpret = tpcall(service_name, (char *)fb, 0, (char **)&fbs, &rcvlen, 0);
        my_tperrno = tperrno;
        tpfree((char *)fb);
        if(tpret == -1)
        {
            file_log("tpcall", "%s %s:Tperrno = %d\n",wsnaddr, service_name, my_tperrno);
            Fadds32(fbs, SVC_ERR_NO32, "999911");
            Fadds32(fbs, SVC_ERR_MSG32, "调用服务失败");
        }
        tpterm();

        ret = Fwrite32(fbs, fw);
        gettimeofday(&tp2, NULL);
        file_log("tpcall","%s %s %d %s"
            ,wsnaddr, service_name, tpret, cal_time(emsg, tp1, tp2));
        if(ret == -1){
            printf("Fwrite32 failed [%d]\n", Ferror);
            break;
        }
        fflush(fw);
        tpfree((char *)fbs);
    }
}

int main(int argc, char *argv[])
{
	int sd, psd;
	int port, ret, pid;
	char ip[50], buf[1024];
	char str[150];

    GenDaemon();

	port = 7777;
	if(argc > 1)
		port = atoi(argv[1]);
	sd = tcp_listen(NULL, port);
	if(sd <= 0){
		printf("tcp listen on %d failed\n", port);
		return -1;
	}

    tcp_server_loop(sd, t_call_back, NULL);
    tcp_close(sd);
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -