#pragma once
#include <string>
#include <WinSock2.h>
#include "export_light_driver_impl.h"
using std::string;
enum ERR_CODE
{
    MY_RET_SUCC = 0,//函数通用执行成功返回
    MY_RET_FAILED = -1,	//函数通用执行失败返回
    MY_RET_OPEN_FAILED = -2,//设备连接失败返回
    MY_RET_SEND_FAILED = -3,//指令发送设备失败返回
    MY_RET_RECV_FAILED = -4,//执行结果读取失败返回
    MY_RET_PARSE_FAILED = -5,//执行结果读取后解析失败返回
    MY_RET_PARAM_OUTOFRANGE = -6//参数值范围越界

};

#define DBS_SUCCEED							0		// 操作成功
#define DBS_ERR_INVALIDHANDLE				1001	// 无效的操作句柄
#define DBS_ERR_UNKNOWN						1002	// 未知错误
#define DBS_ERR_INITSERIALPORT_FAILED		1003	// 初始化串口失败
#define DBS_ERR_RELEASESERIALPORT_FAILED	1004	// 释放串口错误
#define DBS_ERR_SERIALPORT_UNOPENED			1005	// 试图操作一个未打开的串口
#define DBS_ERR_TURNON_CH_FAILED			1006	// 打开通道错误
#define DBS_ERR_TURNOFF_CH_FAILED			1007	// 关闭通道错误
#define DBS_ERR_SET_INTENSITY_FAILED		1008	// 设置亮度错误
#define DBS_ERR_READ_INTENSITY_FAILED		1009	// 读取亮度错误
#define DBS_ERR_SET_WORKMODE_FAILED			1010	// 设置工作模式错误
#define DBS_ERR_READ_WORKMODE_FAILED		1011	// 读取工作模式错误
#define DBS_ERR_INVALIDCMD					1012	// 无效的指令
#define DBS_ERR_VERIFY_FAILED				1013	// 指令校验错误
#define DBS_ERR_COMM_TIMEOUT				1014	// 通信超时错误
#define DBS_ERR_BACK_DATA					1015	// 返回数据错误
#define DBS_ERR_COMM_TOO_QUICK				1016	// 指令速度过快
#define DBS_ERR_SOCKET_UNCONNECT			1017	// 网络未连接

static bool tcp_connect_timeout(SOCKET sockfd, string strIP, int nPort, int nSec);
class LIGHT_DRIVER_IMPL_EXPORT CTcpSocketClient
{
public:
    
    CTcpSocketClient();
    ~CTcpSocketClient();
    bool Init();
    bool Connect(const char* ip, int port, int timeoutSecs=5);
    bool Disconnect();
    bool IsConnected() { return m_isConnected; }
    bool Uinit();
    bool SendCommand(const string sendBuff, int timeoutMs,string& recvBuff);
    int Send(const char* buff, int buffLen);
    int Recv(char* buff, int buffLen, int timeoutMs=500);
private:
    bool m_isInited;
    bool m_isConnected;

    SOCKET  m_socketClient;
};

