协议可以使用的基础数据类型:

UInt8,UInt16,UInt32,UInt64
Int8,Int16,Int32,Int64
Float,Double,Bool,String

[T]  数组,T代表元素类型
[K,V] 字典,K代表键,V代表值,注意键只能为基础类型。

以及三种不同的协议类型类型:

Message  和protobuf的message类似  一个Message就代表一个协议,Message可以包含Struct和Enum,可以包含基础数据类型

Struct  结构体,和Message的区别就是结构体只能包含基础数据类型和枚举(Enum),还有就是结构体在生成代码时不会生成相关的协议ID部分代码,因为Struct就是被设计为被嵌入到其他Message当中。

Enum  枚举,只能包含整数

支持默认值(直接在类型后面加上双括号以及变量值)

下面是协议的一个例子:

from GenProto import *

class DemoEnum(Enum):
one = 1
two = 2 class DemoStruct(Struct):
u8 = UInt8
u16 = UInt16
u32 = UInt32
u64 = UInt64
i8 = Int8
i16 = Int16(1111)
i32 = Int32
i64 = Int64(1000000000000)
f = Float
d = Double
b = Bool(True)
s = String('defVal')
de = DemoEnum(DemoEnum.two) class DemoMessage(Message):
u8 = UInt8(255)
u16 = UInt16
u32 = UInt32
u64 = UInt64
i8 = Int8(-127)
i16 = Int16
i32 = Int32
i64 = Int64
f = Float(0.234234)
d = Double
b = Bool
s = String
de = DemoEnum(DemoEnum.one)
ds = DemoStruct
arr = [DemoStruct]
arr2 = [String]
dict2 = [String,DemoStruct]
dict3 = [UInt32,String]

下面是经过协议工具生成的C++/Python结构体:

 #pragma once
#include "FastNet/core/ClassFactory.h"
#include "FastNet/core/Stream.h"
#include "FastNet/core/App.h"
#include "FastNet/core/Cfg.h" namespace pkt{
namespace demo{ using FastNet::UInt8;
using FastNet::UInt16;
using FastNet::UInt32;
using FastNet::UInt64;
using FastNet::Int8;
using FastNet::Int16;
using FastNet::Int32;
using FastNet::Int64;
using FastNet::Double;
using FastNet::Float;
using FastNet::String;
using FastNet::Bool;
enum class DemoEnum:FastNet::Int32 {
one = ,
two = ,
}; struct DemoStruct : public FastNet::Struct {
bool operator==(DemoStruct const& ) const { return false; }
bool operator!=(DemoStruct const& ) const { return true; }
DefStruct("pkt.demo.DemoStruct",,)
UInt8 u8=;
UInt16 u16=;
UInt32 u32=;
UInt64 u64=;
Int8 i8=;
Int16 i16=;
Int32 i32=;
Int64 i64=;
Float f=0.0f;
Double d=0.0;
Bool b=false;
String s="";
DemoEnum de=(DemoEnum); virtual void Deserialize(FastNet::StreamRead& stream) {
stream.read(u8);
stream.read(u16);
stream.read(u32);
stream.read(u64);
stream.read(i8);
stream.read(i16);
stream.read(i32);
stream.read(i64);
stream.read(f);
stream.read(d);
stream.read(b);
stream.read(s);
stream.read(de);
} virtual void Serialize(FastNet::StreamWrite& stream) {
stream.write(u8);
stream.write(u16);
stream.write(u32);
stream.write(u64);
stream.write(i8);
stream.write(i16);
stream.write(i32);
stream.write(i64);
stream.write(f);
stream.write(d);
stream.write(b);
stream.write(s);
stream.write(de);
} virtual FastNet::UInt32 SerializeSize() override{
FastNet::UInt32 size();
CalcSerializeSize(size,u8);
CalcSerializeSize(size,u16);
CalcSerializeSize(size,u32);
CalcSerializeSize(size,u64);
CalcSerializeSize(size,i8);
CalcSerializeSize(size,i16);
CalcSerializeSize(size,i32);
CalcSerializeSize(size,i64);
CalcSerializeSize(size,f);
CalcSerializeSize(size,d);
CalcSerializeSize(size,b);
CalcSerializeSize(size,s);
CalcSerializeSize(size,de);
return size;
} virtual void Reset() override{
u8=;
u16=;
u32=;
u64=;
i8=;
i16=;
i32=;
i64=;
f=0.0f;
d=0.0;
b=false;
s="";
de=(DemoEnum);
} static void Export(){
boost::python::class_<DemoStruct,boost::python::bases<FastNet::Struct>,boost::shared_ptr<DemoStruct>,boost::noncopyable> _e("DemoStruct");
boost::python::scope _s = _e;
_e.def_readwrite("u8",&DemoStruct::u8);
_e.def_readwrite("u16",&DemoStruct::u16);
_e.def_readwrite("u32",&DemoStruct::u32);
_e.def_readwrite("u64",&DemoStruct::u64);
_e.def_readwrite("i8",&DemoStruct::i8);
_e.def_readwrite("i16",&DemoStruct::i16);
_e.def_readwrite("i32",&DemoStruct::i32);
_e.def_readwrite("i64",&DemoStruct::i64);
_e.def_readwrite("f",&DemoStruct::f);
_e.def_readwrite("d",&DemoStruct::d);
_e.def_readwrite("b",&DemoStruct::b);
_e.def_readwrite("s",&DemoStruct::s);
_e.def_readwrite("de",&DemoStruct::de);
_e.add_static_property("sClsId",&DemoStruct::sClsId);
_e.add_static_property("sClsName",&DemoStruct::sClsName);
_e.add_static_property("sSignId",&DemoStruct::sSignId);
}
}; class DemoMessage final: public FastNet::Message {
public:
DefStruct("pkt.demo.DemoMessage",,)
UInt8 u8=;
UInt16 u16=;
UInt32 u32=;
UInt64 u64=;
Int8 i8=;
Int16 i16=;
Int32 i32=;
Int64 i64=;
Float f=0.0f;
Double d=0.0;
Bool b=false;
String s="";
DemoEnum de=(DemoEnum);
DemoStruct ds;
std::vector<DemoStruct> arr;
std::vector<String> arr2;
std::map<String,DemoStruct> dict2;
std::map<UInt32,String> dict3; virtual void Deserialize(FastNet::StreamRead& stream) {
stream.read(u8);
stream.read(u16);
stream.read(u32);
stream.read(u64);
stream.read(i8);
stream.read(i16);
stream.read(i32);
stream.read(i64);
stream.read(f);
stream.read(d);
stream.read(b);
stream.read(s);
stream.read(de);
stream.read(ds);
stream.read(arr);
stream.read(arr2);
stream.read(dict2);
stream.read(dict3);
} virtual void Serialize(FastNet::StreamWrite& stream) {
stream.write(u8);
stream.write(u16);
stream.write(u32);
stream.write(u64);
stream.write(i8);
stream.write(i16);
stream.write(i32);
stream.write(i64);
stream.write(f);
stream.write(d);
stream.write(b);
stream.write(s);
stream.write(de);
stream.write(ds);
stream.write(arr);
stream.write(arr2);
stream.write(dict2);
stream.write(dict3);
} virtual FastNet::UInt32 SerializeSize() override{
FastNet::UInt32 size();
CalcSerializeSize(size,u8);
CalcSerializeSize(size,u16);
CalcSerializeSize(size,u32);
CalcSerializeSize(size,u64);
CalcSerializeSize(size,i8);
CalcSerializeSize(size,i16);
CalcSerializeSize(size,i32);
CalcSerializeSize(size,i64);
CalcSerializeSize(size,f);
CalcSerializeSize(size,d);
CalcSerializeSize(size,b);
CalcSerializeSize(size,s);
CalcSerializeSize(size,de);
CalcSerializeSize(size,ds);
CalcSerializeSize(size,arr);
CalcSerializeSize(size,arr2);
CalcSerializeSize(size,dict2);
CalcSerializeSize(size,dict3);
return size;
} virtual void Reset() override{
u8=;
u16=;
u32=;
u64=;
i8=;
i16=;
i32=;
i64=;
f=0.0f;
d=0.0;
b=false;
s="";
de=(DemoEnum);
ds.Reset();
arr.clear();
arr2.clear();
dict2.clear();
dict3.clear();
} static void Export(){
boost::python::class_<DemoMessage,boost::python::bases<FastNet::Message>,boost::shared_ptr<DemoMessage>,boost::noncopyable> _e("DemoMessage");
boost::python::scope _s = _e;
_e.def_readwrite("u8",&DemoMessage::u8);
_e.def_readwrite("u16",&DemoMessage::u16);
_e.def_readwrite("u32",&DemoMessage::u32);
_e.def_readwrite("u64",&DemoMessage::u64);
_e.def_readwrite("i8",&DemoMessage::i8);
_e.def_readwrite("i16",&DemoMessage::i16);
_e.def_readwrite("i32",&DemoMessage::i32);
_e.def_readwrite("i64",&DemoMessage::i64);
_e.def_readwrite("f",&DemoMessage::f);
_e.def_readwrite("d",&DemoMessage::d);
_e.def_readwrite("b",&DemoMessage::b);
_e.def_readwrite("s",&DemoMessage::s);
_e.def_readwrite("de",&DemoMessage::de);
_e.def_readwrite("ds",&DemoMessage::ds);
FastNet::App::RegisterStlVector<std::vector<DemoStruct> >("v_2553082456");
_e.def_readwrite("arr",&DemoMessage::arr);
FastNet::App::RegisterStlVector<std::vector<String> >("v_2147306297");
_e.def_readwrite("arr2",&DemoMessage::arr2);
FastNet::App::RegisterStlMap<std::map<String,DemoStruct> >("m_2979050852");
_e.def_readwrite("dict2",&DemoMessage::dict2);
FastNet::App::RegisterStlMap<std::map<UInt32,String>,true>("m_3331818994");
_e.def_readwrite("dict3",&DemoMessage::dict3);
_e.add_static_property("sClsId",&DemoMessage::sClsId);
_e.add_static_property("sClsName",&DemoMessage::sClsName);
_e.add_static_property("sSignId",&DemoMessage::sSignId);
}
}; } //end namespace demo
} //end namespace pkt

使用(Python):

m = FastNet.Message.Create(demo.DemoMessage.sClsId)
m.u8 = 255
m.u16 = 65535
... session.SendMsg(m)

使用(C++):

auto m = FastNet::Message::Create<demo::DemoMessage>();
m->u8 = ;
m->u16 = ;
... session->SendMsg(m);

FastNet C++/Python 网络通信库之 协议的更多相关文章

  1. python常用库

    本文由 伯乐在线 - 艾凌风 翻译,Namco 校稿.未经许可,禁止转载!英文出处:vinta.欢迎加入翻译组. Awesome Python ,这又是一个 Awesome XXX 系列的资源整理,由 ...

  2. python标准库00 学习准备

    Python标准库----走马观花 python有一套很有用的标准库.标准库会随着python解释器一起安装在你的电脑上的.它是python的一个组成部分.这些标准库是python为你准备的利器,可以 ...

  3. Python标准库的学习准备

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python标准库是Python强大的动力所在,我们已经在前文中有所介绍.由于标准 ...

  4. Python标准库——走马观花

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python有一套很有用的标准库(standard library).标准库会随着 ...

  5. Python标准库与第三方库详解(转载)

    转载地址: http://www.codeweblog.com/python%e6%a0%87%e5%87%86%e5%ba%93%e4%b8%8e%e7%ac%ac%e4%b8%89%e6%96%b ...

  6. python标准库之字符编码详解

    codesc官方地址:https://docs.python.org/2/library/codecs.html 相关帮助:http://www.cnblogs.com/huxi/archive/20 ...

  7. [python标准库]Pickle模块

    Pickle-------python对象序列化 本文主要阐述以下几点: 1.pickle模块简介 2.pickle模块提供的方法 3.注意事项 4.实例解析 1.pickle模块简介 The pic ...

  8. Python常用库大全

    环境管理 管理 Python 版本和环境的工具 p – 非常简单的交互式 python 版本管理工具. pyenv – 简单的 Python 版本管理工具. Vex – 可以在虚拟环境中执行命令. v ...

  9. python模块:网络协议和支持

    python模块:网络协议和支持 webbrowser 调用浏览器显示html文件 webbrowser.open('map.html') [webbrowser - Convenient Web-b ...

随机推荐

  1. hihocoder 1582 : Territorial Dispute(凸包)

    传送门 题意 略 分析 求一个凸包即可 1.所有点在凸包上且点数>3,令凸包上第1,3点为'A',其余点为'B' 2.部分点在凸包上,令凸包上点为'A',其余点为'B' 3.无可行情况 附代码 ...

  2. 51 nod 1521 一维战舰(二分)

    传送门 题意 分析 这是我在51nod上的第2题,下载了4个数据,得不偿失?我太菜啦 一开始wa了6个点,下数据后发现舰与舰不能相邻,再交wa,发现l和r都没设好,再wa,发现check里面[1,b[ ...

  3. <TLE>奇偶剪枝hdoj1010

    (奇偶剪枝)转自百度百科,讲的非常棒: http://baike.baidu.com/link?url=3g5bW7LszRVOVvFDFp6cL0ZZnAaOLUdpaNjc2leHoxkKU9Eh ...

  4. poj1015【DP.......无奈了】

    首先,读题,真是一窍不通.后来看完程序的意思,才明白吧.. 题意: n个人中选m个,条件是取sum|D-P|最小,当有|D-P|相同的时候取|D+P|最大的.然后输出那些m个人的sumD,sumP,最 ...

  5. 11.6NOIP模拟赛

    [数据规模和限制] 对于全部测试数据,满足 N,M,K≤,W≤ 各个测试点的数据规模及特殊性质如下表. 测试点 N M K ≤ ≤ ≤ ≤ ≤ ≤ ≤ ≤ ≤ ≤ 师 更多咨询:北京信息学窦老师 QQ ...

  6. 【CodeForces - 546C】Soldier and Cards (vector或队列)

    Soldier and Cards 老样子,直接上国语吧  Descriptions: 两个人打牌,从自己的手牌中抽出最上面的一张比较大小,大的一方可以拿对方的手牌以及自己打掉的手牌重新作为自己的牌, ...

  7. JSR 303 - Bean Validation 模型验证

    类是转载的,不知道转的哪里的. 此类依赖 JSR 303 – Bean Validation, Hibernate Validator. 代码不能直接运行.意会一下.自己改改. import com. ...

  8. Centos6.8 配置 Tomcat

    1.安装Tomcat,安装之前必须先安装Java,先安装java 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index. ...

  9. macos php安装扩展sqlsrv连接sqlserver

    Install the PHP Drivers for SQL Serve sudo pecl install pdo_sqlsrv   sudo pecl install sqlsrv 微软官方文档 ...

  10. SQL-添加字段处理

    1.alter   table   [dbo].[SiteTracks]   drop   constraint   DF__SiteTrack__Audit__47DBAE452.ALTER TAB ...