所在的位置: java >> 学习资料 >> TAF开发指南cJCE语法

TAF开发指南cJCE语法

1.概述

JCE文件是TAF框架中客户端和服务端的通信协议;

JCE是一种类c++语言的标识符,用于生成具体的服务接口文件;

JCE文件的扩展名必须以.jce为扩展名;

对于结构定义,可以支持扩展字段,即可以增加字段而不影响以前结构的解析,可以在存储/协议等地方单独使用;

大小写敏感;

2.词法规则2.1注释

采用c++的注释规范。//表示注释一行,/**/表示注释范围中的所有代码。

2.2标识符

所有标识符不能以’taf_’开头,且必须以字母开头,同时不能和关键字冲突。

3.关键字

void,struct,bool,byte,short,int,double,float,long,string,vector,map,key,routekey,module,interface,out,require,optional,false,true,enum,const

4.基本类型支持的基本类型包括以下:

void:只能在函数的返回值表示

bool

byte

short

int

long

float

double

string

vector:数组

map:关联map

说明:

可以自定义struct;

vector和map可以和任何类型嵌套

注意:如果传二进制的数据,请务必用vectorbyte传递,不要使用string,因为java中需要用byte[]传二进制,而不能用String(string在java中有字符集的概念)。

5.复杂类型5.1枚举

枚举类型的定义如下:

enumTE

{

E1,

E2,

E3

};

说明:

枚举类型不支持在指定枚举变量的值,例如不支持:E1=1这种定义方式;

第一个定义的枚举类型值为0,这里E1的值为0;

枚举类型在jce文件定义后,通过jce2cpp或jce2java生成以后,除了会生成相应的enum定义之外,会生成etos和stoe函数,将枚举值转换成字符串,以及将字符串转换成枚举值,在代码调试时会非常方便。

建议jce文件中,所有接口都以int返回,且返回值在jce中以枚举来定义。

5.2常量

Jce文件中可以定义常量,例如:

constinta=0;

conststrings=“abc”;

说明:

由于map,vector没有描述常量的值,因此不支持map,vector的常量定义;

5.3结构

结构定义如下:

structKeyStruct

{

0requirestrings;

1optionalinti=23;

};

key[KeyStruct,s,i];

tag说明:

第一列数字表示该字段的标识(tag),无论结构增减字段,该字段得值都不变,必须和响应的字段对应;

Tag的值必须要=0且=

require表示该字段必选;

optional表示该字段可选;

对于optional字段,可以有一个缺省值;

Key说明:

key表示结构的小于比较符号,缺省时Struct是没有小于操作的,如果定义了key,则生成小于比较符,在需要将结构体作为key放入map时需要;

key详细说明:

key[Stuct,member…]:Struct表示结构的名称;Member表示该结构的成员变量,可以有多个;

生成的小于比较操作符,按照key中成员变量定义的顺序进行优先比较;

生成小于比较操作符以后,该结构就可以作为map的key;

其他说明:

对于结构而言,提供两个成员函数用于直接打印出结构的内容,可以用于调试和记录日志:

ostreamdisplay(ostream_os,int_level=0):直接打印结构的详细内容,主要用于调试;

ostreamdisplaySimple(ostream_os,int_level=0):所有成员变量自动按照顺序以

分隔打印出来,用于记录日志;

TAF框架中提供了日志宏,记录日志,可以直接使用,例如:

a.display(LOG-debug());

5.4序列

序列用vector来定义,如下:

vectorintvi;

对应到c++中为:vectorint;

对应到java中为:int[]

5.5字典

字典用map来定义,如下:

mapint,stringm;

说明:

对于struct,通常不能作为map的key,因此struct没有大小比较符号;

如果需要struct能够作为map的key,需要用less定义struct中成员变量的比较顺序;

对应到c++中为:mapint,string

对应到java中为:HashMapInteger,String

5.6嵌套

任何struct,map,vector都可以嵌套;

6.名字空间所有的struct,interface必须在名字空间中,例如:moduleMemCache{

structKey

{

0requirestrings;

};

structValue

{

0requirestrings;

};

interfaceMemCacheI

{

intget(Keyk,outValuev);

intset(Keyk,Valuev);

intsetDirty(Keyk,boolb,intt);

intcheckDirty(Keyk);

};

};

说明:

名字空间不能嵌套;

可以引用其他名字空间,例如:Demo1::Key

7.接口

接口定义如下,例如:

interfaceDemo

{

intget(outvectormapint,stringv);

intset(vectormapint,stringv);

};

说明:

Out表示输出参数;

接口定义后,会自动生成同步接口和异步接口;









































北京哪治疗白癜风好
白癜风该如何治疗



转载请注明:http://www.jiaju1314.com/xxzl/9342.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了