/*
	协议支持包含功能， 类似c语言中的#include命令， 但是由于生成文件的需要， 所以不能指定多个-I参数来寻找不同目录下的文件。
	所有的import路径都是从唯一的-s参数所表示的目录开始算起的。
*/

-让我们首先来看一个网络协议的例子
#include "common/common.tdr"
-重复包含一个文件， 并不会出错， 因为编译器只会展开第一个文件。
#include "common/common.tdr"

const uint64 test_uint64 = 18446744073709551615;
const float f = 123456789012313.123456789;
struct login_req
{
	char name[MAX_NAME_LENGTH] = 1;
	char password[MAX_NAME_LENGTH] =10;
	uint8			age;
};
const uint32 STRING_LEN = 1024;
typedef char* TEST_STRING_T;
typedef int32 bool_t;
struct login_rsp
{
		bool_t result = 10;--0表示成功， 非0表示失败
if(result == 0)	uint64 session_id = 11;--可以使用条件判断与据来规定何时出现这个元素， 合法的运算符有==, !=, &这三种。
};
const bool_t TEST_TYPEDEF_INT32 = 10;

union message_body(message_id)
{
E_MID_LOGIN_REQ:
	login_req login_req;	
E_MID_LOGIN_RSP:
	login_rsp login_rsp;
};

-定义网络协议
struct message
{
	uint32 cond;
/*if(cond ==0)*/	message_id mid;-参数不可以具有条件语句
	message_body body(mid);
};


/*
	读取配置文件
*/
enum tconnd_instance_level
{
	e_low = 0,
	e_high,
};
const uint32 TONND_CONFIG_NUM = 1024;
const uint32 IP_LENGTH = 16;
struct tconnd_instance_config
{
	tconnd_instance_level level;
	char ip[IP_LENGTH];
	uint16 port;
	uint32 backlog;
	uint32 epoll_size;
};
struct tconnd_config
{
	char			log_config[MAX_NAME_LENGTH];
	uint32 			instance_config_num;
	tconnd_instance_config 	instance_config[TONND_CONFIG_NUM] refer(instance_config_num);
};


/*
	读取道具表格
*/
enum item_type
{
	crystal,
	other,
};

const uint32 ITEM_NAME_LENGTH = 1024;
const uint32 ITEM_VEC_NUM = 10;
struct item_table
{
	uint32 						ID = 1;
	char						ItemName[ITEM_NAME_LENGTH];
	int32						Metempsychosis;
	uint32						UseTime;
	uint32						Bill;
	uint16						ReplaceItem;
	int32						Medals;
	int32						Value;
	int32						ReserveMoneyFlag;
	uint8						Quality;
	item_type					ItemType;
	uint32						UseSingTime;
	uint32						UserTarget;
	uint32						CanMoved;
	uint32						CanDeleted;
	uint32						CanTrade;
	uint32						CanSold;
	uint32						CanStored;
	uint32						CanLocked;
	uint32						CanBound;
	uint32						IsExclusive;
	uint32						IsExpendable;
	uint32						ColdDownType;
	uint32						ColdDownTime;
	uint32						CanDrop;
	uint32						DecomposePackID;
	uint32						IsMerge;
	uint32						vec_num;
	uint64						vec_int[ITEM_VEC_NUM] refer(vec_num);
	char*						item[ITEM_VEC_NUM];
};

/*
腾讯开放接口中获取用户信息的协议
http://wiki.open.qq.com/wiki/v3/user/get_info#2.3.09HTTP.E8.AF.B7.E6.B1.82.E6.96.B9.E5.BC.8F

Content-type: text/html; charset=utf-8
{
"ret":0,
"is_lost":0,
"nickname":"Peter",
"gender":"男",
"country":"中国",
"province":"广东",
"city":"深圳",
"figureurl":"http://imgcache.qq.com/qzone_v4/client/userinfo_icon/1236153759.gif",
"is_yellow_vip":1,
"is_yellow_year_vip":1,
"yellow_vip_level":7,
"is_yellow_high_vip": 0
}
*/

-腾讯开放接口， 获取用户信息的协议
struct msg_qq_rsp_userinfo
{
	int32 ret;
	int32 is_lost;
	char nickname[MAX_NAME_LENGTH];
	char gender[MAX_NAME_LENGTH];
	char country[MAX_NAME_LENGTH];
	char province[MAX_NAME_LENGTH];
	char city[MAX_NAME_LENGTH];
	char figureurl[MAX_NAME_LENGTH];
	int32 is_yellow_vip;
	int32 is_yellow_year_vip;
	int32 yellow_vip_level;
	int32 is_yellow_high_vip;
	bool test;
};

const uint64 test_ui64 = 0xffffffffffffffff;

const uint16 PWEB_SESSION_ID_LENGTH = 64; 

--读取WebServer发来的json协议
struct pweb_login_rsp
{
                    bool                            result;
if(result)          uint32                          session_id_len;
if(result)  	    char							session_id[PWEB_SESSION_ID_LENGTH] refer(session_id_len);
};

