/*************************************************************
/* Copyright (C), 2014-2020, lyfz. Co., Ltd.
/* 文件名:		Client2SrvType.h
/* 作者:		Jeff.w			 
/* 创建日期:	2014-08-07
/* 版本号:		V1.0
/* 描述:		核心层底,客户端与服务端通信协议包定义
/* 其它:  
/* 主要类模块: 
/* 历史修改记录: 
/*		作者           时间              版本           描述
/*	    Jeff.w         14/08/07          1.0	      创建这个模块
***************************************************************/

#include "Stdafx.h"

#include "Def.h"
#include "Const.h"

#ifndef CLIENT2SRVTYPE_HEADER
#define CLIENT2SRVTYPE_HEADER

// 完整的数据包：协议头 + 协议体（数据）+ 协议尾;
// 注意：尽量使数据包小,使数量吞吐量更大、运行速度更快;

// 公共命令类类型;:common comand type
// 主命令类型1: C2L:consumer terminal to lyfz service;
// 主命令类型2: C2C:consumer client to consumer service;
enum
{
	//----------------------------:common comand.type:  1~999----------------------------------------------------
	CMD_HEART							= 1,		// 心跳包;
	CMD_TOCHAT							= 2,		// 文字聊天;
	CMD_OHTER_INFO						= 999,		// 其他信息;
	
	//------------------------C2L:consumer terminal to lyfz.service: 1000~1999------------------------------------
	C2LCMD_REQ_LOGIN					= 1000,		// 用户终端请求登录利亚方舟服务端（外网ip+登录信息）;
	C2LCMD_GET_DOG_DATA					= 1001,		// 利亚方舟获取用户终端机器加密狗数据信息;
	C2LCMD_GET_VAR						= 1002,		// 请求用户终端的版本号;
	C2LCMD_DEAL_ILLEGAL					= 1003,		// 处理盗版、过期用户：停止用户终端工作、启用定时关机、程序文件自动删除等等操作命令;
	C2LCMD_DEAL_SMS						= 1004,		// 利亚方舟服务端处理用户终端的短信发送工作;
	C2LCMD_GET_DBINFO					= 1005,		// 利亚方舟服务端获取用户终端电脑数据库信息;
	
	// .预留，若SQL数据库引擎未启用TCP/IP作为远程连接方式,需定义读写表的具体命令;（Jeff.100%的不建议使用这种方式获取数据，占用太多带宽和资源）

	C2LCMD_OTHER_INFO					= 1999,     // 读其它信息;

	//------------------------C2C:consumer client to consumer service: 2000~2999--------------------------------
	C2CCMD_REQ_LOGIN					= 2000,     // 客户端请求登录服务器;
	C2CCMD_REQ_LOGOUT					= 2001,		// 客户端注销;
	C2CCMD_REQ_DOG_DATA					= 2002,     // 读软件狗数据;
	C2CCMD_AUTO_UPDATA					= 2003,		// 服务端向所有客户发送自动数据更新命令;
	C2CCMD_REQ_SERVER_VAR				= 2004,		// 请求服务端的版本号;
	C2CCMD_GET_DBINFO					= 2005,		// 利亚方舟服务端获取用户终端电脑数据库信息;

	// .预留，若SQL数据库引擎未启用TCP/IP作为远程连接方式,需定义读写表的具体命令;（Jeff.100%的不建议使用这种方式获取数据，占用太多带宽和资源）

	C2CCMD_OTHER_INFO					= 2999,     // 读其它信息;
};

// 请在此处更改需要设置的包头和包尾标识符;
const int PBOF = 0x7e;
const int PEOF = 0x0e;

// 协议头-勿更改;
typedef struct __STPROTOCOLHEADER__
{
	unsigned char bof;		// 协议头标识;
	unsigned int  nCmd;		// 具体的命令;
	unsigned int  nCmdType;	// 命令类型;
	unsigned int  nDataLen;	// 有效数据长度,不包含头;
	unsigned int  nVerify;	// 预留校验码;

	//unsigned char pData[4];	// 缓冲区指针,实际大小由nDataLen决定;
	__STPROTOCOLHEADER__(){bof = PBOF;}

}STProtocolheader,*pSTProtocolheader;

// 协议尾-勿更改;
typedef struct __STPROTOCOLTAIL__
{
	unsigned char eof;		// 协议尾标识;
	__STPROTOCOLTAIL__(){eof = PEOF;}
}STProtocoltail,*pSTProtocoltail;

// 以下为全为协议体;
// 示例,文件信息：
typedef struct __STPROTOCOLBODY__
{
	STProtocolheader	tPHeader;
	// 需要添加的实际数据;
	unsigned __int64	nFileLength;				// 文件长度;
	TCHAR				szFileName[MAX_PATH];		// 长文件名;
	TCHAR				szFileExt[MAX_PATH];		// 文件扩展名;
	DATE				fCreateDate;				// 文件创建日期;
	DATE				fModifyDate;				// 文件创建日期;
	// and so on...
	STProtocoltail		tPTail;
}STProtocolbody,*pSTProtocolbody;


typedef struct __STCHATBODY
{
	STProtocolheader tPHeader;
	TCHAR	szChat[MAX_CHATLENGTH];
	STProtocoltail	tPTail;
}STChatbody,*pSTChatbody;

#endif