简单示例
创建一个名为"example.btk"的文件,文件内容如下:
struct Address
{
string city;
string street;
}
struct User
{
uint64 id;
string name;
Address[] addresses;
}
接下来可以使用bintalk编译这个文件,生成C++代码文件:
bintalk -g cpp example.btk
这样会生成"example.h"和"example.cpp"两个C++文件。
使用生成的文件:
#include "example.h"
#include "bintalk/MemoryReader.h"
#include "bintalk/MemoryWriter.h"
int main(int argc, char* argv[])
{
User user1;
user1.id = 999;
user1.name = "user";
Address addr;
addr.city = "Beijing";
addr.street = "Jie";
user1.addresses.push_back(addr);
bintalk::BINARY data;
bintalk::MemoryWriter w(&data);
user1.serialize(&w);
User user2;
bintalk::MemoryReader r(&data);
user2.deserialize(&r);
// user2 now has the same data as user1.
return 0;
}
Service示例
创建另外一个btk文件"service.btk":
#import example.btk
service UserService
{
createUser(User user);
deleteUser(uint64 id);
}
编译这个文件,产生C++代码:
bintalk -g cpp service.btk
这样会生成"service.h"和"service.cpp"文件。
使用生成的文件:
#include "service.h"
...
class Stub : public UserServiceStub
{
public:
Stub(bintalk::BinaryWriter* w):w_(w){}
virtual bintalk::BinaryWriter* methodBegin() { return w_; }
virtual void methodEnd() {}
bintalk::BinaryWriter* w_;
};
class Proxy : public UserServiceProxy
{
public:
virtual bool createUser(User& user) { return true; }
virtual bool deleteUser(bintalk::UINT64 id) { return true; }
};
int main(int argc, char* argv[])
{
User user1;
user1.id = 999;
user1.name = "user";
Address addr;
addr.city = "Beijing";
addr.street = "Jie";
user1.addresses.push_back(addr);
bintalk::BINARY data;
bintalk::MemoryWriter w(&data);
Stub stub(&w);
stub.createUser(user1);
bintalk::MemoryReader r(&data);
Proxy proxy;
// Proxy::createUser is invoked here.
UserServiceDispatcher::dispatch(&r, &proxy);
return 0;
}