分类:
2009-08-22 13:20:18
【函数原型】:
void tpreturn( int rval, int rcode, char *data, long len, long flags );
【功能说明】:
tpreturn函数标志服务处理结束,并将返回信息发送给请求者。
【参数说明】:
rval: TPSUCCESS: 服务处理成功;
TPFAIL: 服务处理失败;
rcode: 通过该参数返回调用者一个应用自定义的值,客户端可以查询全局变量tpurcode访问rcode值;
data: 返回包数据指针;
len: 返回包长度;
flags: 未使用,置为0
【返回值】:
无
【使用例】:
tpreturn( TPSUCCESS, 0, rqst->data,
Tuxedo提供了九种通讯缓冲区类型,常用的有:
l STRING
l CARRAY
l VIEW / VIEW32
l FML / FML32
STRING类型用于数据是字符数组,且以空字符结束。
【使用方法】:
用C语言的字符串处理方式进行处理。
【使用例】:
客户端:
if ( ( sendbuf = tpalloc( "STRING", NULL, sendlen ) ) == NULL ) {
fprintf( stderr, "Error allocating send buffer\n" );
tpterm( );
exit( 1 );
}
strcpy( sendbuf, s_buf );
服务器端:
int SVCNAME( rqst )
TPSVCINFO *rqst;
{
…
strcpy( s_buf, rqst->data );
…
}
CARRAY类型用于处理二进制数据,其中可以包含空字符,因此在使用该类型进行传输时必须指定长度。
【使用方法】:
用二进制数据处理方式进行处理。
【使用例】:
客户端:
if ( ( sendbuf = tpalloc( "CARRAY", NULL, sendlen ) ) = NULL ) {
fprintf( stderr, "Error allocating send buffer\n" );
tpterm( );
exit( 1 );
}
memcpy( sendbuf, s_buf, s_len );
服务器端:
int SVCNAME( rqst )
TPSVCINFO *rqst;
{
…
memcpy( s_buf, rqst->data, rqst->len );
…
}
VIEW类型是应用程序定义的C结构,必须有一个VIEW描述文件来说明该结构。VIEW类型必须有子类型,用来说明每个结构成员的类型。
VIEW32类型与VIEW相似,只是允许更大的字符域、更多的域,以及更全面的类型。
使用VIEW/VIEW32类型需指定以下环境变量:
l VIEWDIR / VIEWDIR32:
VIEW结构定义文件的存放路径,用逗号隔开;
l VIEWFILES / VIEWFILES32:
使用的VIEW结构定义文件名,用逗号隔开。
一般在本应用的setenv文件中指定以上环境变量的设置。
【使用例】:
$ cat aud.v /* VUEW描述文件 */
$ /* View data structure */
VIEW aud
#type cname fbname count flag size null
long b_id - 1 - - 0
float balance - 1 - - 0.0
string ermsg - 1 - 80 ""
END
$cat setenv
APPDIR=/users/test/simpdir;export APPDIR
TUXCONFIG=/users/test/simpdir/tuxconfig;export TUXCONFIG
VIEWDIR=/users/test/simpdir;export VIEWDIR
VIEWFILES=aud.V;export VIEWFILES
$ . setenv // 使setenv文件中设置的环境变量生效
$CCFLAGS=/usr/informix/incl/esql;export CCFLAGS
// 如果系统中既安装了informix,又安装了tuxedo,两者的include目录中均会包含decimal.h等文件,一般将tuxedo用户下的decimal.h删除或易名。因此在使用viewc命令时需指定包含decimal头文件的路径。
$viewc –n aud.v
生成aud.V和aud.h
$ cat aud.h
struct aud {
long b_id;
float balance;
char ermsg[80];
}
客户端:
struct aud *s_buf;
s_buf = ( struct aud* )tpalloc( "VIEW", "aud", sizeof( struct aud ) );
s_buf->b_id = …;
s_buf->balance = …;
strcpy( s_buf->ermsg, … );
tpcall( "SVCNAME", s_buf, … );
服务器端:
struct aud *rcv_buf, *ret_buf;
rcv_buf = ( struct aud * ) rqst->data;
ret_buf = ( struct aud * )tpalloc( "VIEW", "aud", sizeof( struct aud ) );
ret_buf->b_id = …;
ret_buf->balance = …;
strcpy( s_buf->ermsg, … );
tpreturn( TPSUCCESS, 0, ( char* )ret_buf,
FML类型是Tuxedo自定义的类型,它的每个数据域均有自己的标志符、发生频次和长度指示器。
【函数原型】:
int Fadd( FBFR *fbfr, FLDID fieldid, char *value, FLDLEN len );
【功能说明】:
给数据域缓冲区增加新的域值。
【参数说明】:
fbfr: 数据域缓冲区指针
fieldid: 域标识符
value: 新值指针
len: 对CARRAY类型指定长度
【返回值】:
<0: 失败返回
else: 成功返回
【函数原型】:
int Fchg( FBFR *fbfr, FLDID fieldid, FLDOCC oc, char *value, FLDLEN len );
【功能说明】:
修改数据域缓冲区中的域值。
【参数说明】:
fbfr: 数据域缓冲区指针
fieldid: 域标识符
oc: 域的频次
value: 新值指针
len: 对CARRAY类型指定长度
【返回值】:
<0: 失败返回
else: 成功返回