BTK文件
BTK文件是bintalk使用的源文件,用来描述结构化数据。一个有效的btk文件可以包含任意数量的定义。如果需要使用一个定义,必须它在之前已经被定义。如果需要使用其他文件中的定义,需要将文件import进来。
一个btk文件的基本结构:
#import OtherFile1.btk
...
#import OtherFileN.btk
definition1
definition2
...
definitionN
定义可以使:
- 枚举定义
- 结构体定义
- 服务定义
基本数据类型
bintalk使用一套基本数据类型来描述结构化数据。每种基本类型会被翻译成特定语言的类型。
Type | Desc |
---|---|
double | 64 bits double precision floating point number |
float | 32 bits floating point number |
int64 | 64 bits integer |
uint64 | 64 bits unsigned integer |
int32 | 32 bits integer |
uint32 | 32 bits unsinged integer |
int16 | 16 bits integer |
uint16 | 16 bits unsigned integer |
int8 | 8 bits integer |
uint8 | 8 bits unsigned integer |
bool | Boolean value(true or false) |
string | 8 bits character array |
binary | uint8 array |
所有动态大小的类型(string, binary)可以限定他们的最大值。
string(32)
表示这个字符串类型最多可以容纳32个字符。
枚举
枚举用来设置一个被命名的常数集合,和c++的"enum"类似。不同的是,不能独立的设置每个枚举项的值,并且虽大枚举项数量不能超过256。
枚举的定义:
enum EnumName
{
enum_item0,
enum_item1,
...
enum_itemN,
}
数据域
data_type field_name
"data_type"可以使任意的基础类型,或者是自定义类型(enum, struct)。
比如:
int32 f1
如果想要表示一个特定类型的数据,可以在"data_type"后面加上"[]"。
比如:
int32[] f_array
同样,可以限定数组的最大长度:
int32[8] f_array
这样表示f_array可以包含最多8个int32值。
结构体
类似于C++中的结构体,结构体可以用来自定义数据类型。
结构体定义如下:
struct StructName
{
data_field1;
...
data_fieldN;
}
一个结构体可以从另一个结构体派生:
struct StructName : ParentStructName
派生后的结构体包含了父结构体的数据域。
服务
服务代表一个功能性结构,一般被用于构建"RPC"系统。一个服务由方法组成。严格上讲,服务并不是一般意义上的"RPC"接口。方法只有参数,没有返回值。仅仅是一个消息传递接口。service ServiceName
{
method_name1(field1, field2, ..., fieldN);
...
method_nameN(...);
}
服务也可以派生:
service ServiceName : ParentServiceName
派生后的服务包含了父服务的方法。