#ifndef OpenTestSystem_OtxDiagManager_Client_Client_H
#define OpenTestSystem_OtxDiagManager_Client_Client_H

#include "ClientDefs.h"
#include "CommonClasses.h"

#include <functional>
	
namespace OpenTestSystem
{
	namespace OtxDiagManager
	{
		namespace Client
		{
			//!  Client interface. 
			/*!
			  The client interface communicate with Server
			*/
			class CLIENT_EXPORTS Client
			{
			public:
				Client() {};
				virtual ~Client() {};
				//! Execute a command
				/*!
				  \param command an OpenTestSystem::OtxDiagManager::Common::Command argument.
				  \return OpenTestSystem::OtxDiagManager::Common::Result
				  \sa Client(), ~Client()
				*/
				virtual OpenTestSystem::OtxDiagManager::Common::Result * Execute(OpenTestSystem::OtxDiagManager::Common::Command &command) { return nullptr; };
				//! Stop connecting to server.
				virtual void Stop() {} 

				virtual void SetAsyncResultHandler(std::function<void(const OpenTestSystem::OtxDiagManager::Common::Result&)>) {}
				virtual void SetExceptionHandler(std::function<void(const OpenTestSystem::OtxDiagManager::Common::Exception&)>) {}
			};
		}
	}
}
#endif // OpenTestSystem_OtxDiagManager_Client_Client_H