#ifndef __SAT_PROTOCOL__
#define __SAT_PROTOCOL__

#pragma once

namespace SATPROTO{
	//////////////////////////////////////////////////////////////////////////
	// 具体协议指令;
	enum ProtocolCMD {
		// 登录、登出;
		CMD_LOGIN					= 0,
		CMD_LOGOUT,
		// 设备;
		CMD_ADD_DEVICE,
		CMD_DEL_DEVICE,
		CMD_QUERY_DEVICES,
		// 查询任务;
		CMD_QUERY_TASK
	};

	//////////////////////////////////////////////////////////////////////////
	// 通信数据声明;
#pragma pack(push)
#pragma pack(1)
	// 数据头;
	typedef struct _DATAHEADER_ {
		// 协议标识符;
		byte			protocol;
		// 当前通信包的长度=header长度+buf长度;
		unsigned int	len;
		// 命令类型;
		byte			cmd;
	}DataHeader, *pDataHeader;

	// 请求包
	typedef struct _PACKAGE_ {
		DataHeader	header;
		byte		buf[4]; // 具体内容(指针地址);
	}Package;

	// 用于登录/登出;
	typedef struct __USERINFO__ {
		char		szUserName[MAX_PATH];
		char		szPassword[MAX_PATH];
		char		szActuatorName[MAX_PATH];
	}UserInfo, *pUserInfo;

	// 登录返回;
	typedef struct __LOGIN_RESP__  {
		// true登录成功;
		bool		bStatus;
		// 描述(暂时不用);
		char		szMessage[MAX_PATH];
	}LoginResp, *pLoginResp;

	typedef struct __DEVICE__ {
		int 			nType;				// 0=虚拟, 1=usb, 2=网线;
		char		 	szName[MAX_PATH];	// 设备名称(IP:端口号);
		int				nStatus;			// 设备状态：0表示空闲,1表示繁忙;
	}Device, *pDevice;

	// 查询设备返回;
	typedef struct __QUERY_DEVICES_RESP__ {
		// 设备数量;
		int			nSize;
		// 最多只能返回30个设备;
		Device		ssDevs[30];
	}DeviceResp, *pDeviceResp;

#pragma pack(pop)
}

#endif // __SAT_PROTOCOL__