#pragma once

#include "TCPClient.h"

class CRedRatProcess: public CTCPClient
{
public:
	CRedRatProcess(void);
	~CRedRatProcess(void);

protected:
	bool checkEOM(std::string& data);

private:
	// ֻ������һ�����������;
	static DWORD m_dwCurAppId;
	std::string m_strCurDevice;
	std::string m_strCurDataset;
	std::vector<std::string> m_vtDevices;
	std::vector<std::string> m_vtDataset;
	std::vector<std::string> m_vtSignals;

	// �ⲿ����ӿ�;
public:
	static bool StartApp(LPCTSTR lpAppDir, LPCTSTR lpSignalXml, DWORD dwPort = 40000);
	static DWORD IsAppRunning(LPCTSTR lpszAppDir);
	static bool CloseApp(DWORD dwAppId = 0);
	static DWORD GetProcessId(std::string strApp = "RedRatHubCmd.exe");

	// ������ӿ�;
public:
	// ��ȡ�豸�б�;
	bool getDeviceNameList();
	bool getDeviceNameList(std::vector<std::string>& vtDevice);
	// �����ź����ݼ�;
	void SelectDataset(std::string dataset) { m_strCurDataset = dataset; }
	// ��ȡ���ݼ��б�;
	bool getDatasetNameList();
	bool getDatasetNameList(std::vector<std::string>& vtDataset);
	// �����ź����ݼ�xml�ļ�,����ɾ����ǰ���м��ع���xml�ļ�;
	bool loadSignalDataSet(std::string file);
	// �����ź����ݼ�xml�ļ�, ��ͬ���ݼ����ƵĽ��ᱻ����
	bool addSignalDataSet(std::string file);
	// ��ȡָ�����ݼ��ź�����;
	//bool getSignalsName(std::string dataset = "");
	bool getSignalsName(std::vector<std::string>& vtSignals, std::string dataset = "");
	std::string getSignalsName(std::string dataset = "");
	// ���͵����ź�;
	bool sendSignal(std::string signal, int send_times = 1, int sleep_time = 1000);
	// ���Ͷ���ź�;
	bool sendSignals(const char(*signals)[10], int nCount, int sleep_time = 1000);
	bool sendSignals(std::string signals[], int nCount, int sleep_time = 1000);
	bool sendSignals(std::vector<std::string>& vtSignals, int sleep_time = 1000);
	// �ظ�����;
	bool sendRepeatsSignal(std::string signal, int repeat_time = 2);
	bool sendDurationSignal(std::string signal, int duration_time = 1000);
	bool sendBothSignal(std::string signal, int repeat_time = 2, int duration_time = 1000);
};