Toshihiro Shimizu 890ddd
#ifndef SERVICE_H
Toshihiro Shimizu 890ddd
#define SERVICE_H
Toshihiro Shimizu 890ddd
Shinya Kitaoka 262a92
#include <memory></memory>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class TFilePath;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include <string></string>
Toshihiro Shimizu 890ddd
#include <qstring></qstring>
Toshihiro Shimizu 890ddd
using namespace std;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//------------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifdef TFARMAPI
Toshihiro Shimizu 890ddd
#undef TFARMAPI
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Shinya Kitaoka 9f5a1b
#ifdef _WIN32
Toshihiro Shimizu 890ddd
#ifdef TFARM_EXPORTS
Toshihiro Shimizu 890ddd
#define TFARMAPI __declspec(dllexport)
Toshihiro Shimizu 890ddd
#else
Toshihiro Shimizu 890ddd
#define TFARMAPI __declspec(dllimport)
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
#else
Toshihiro Shimizu 890ddd
#define TFARMAPI
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//------------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
bool ReportStatusToSCMgr(long currentState,
Toshihiro Shimizu 890ddd
						 long win32ExitCode,
Toshihiro Shimizu 890ddd
						 long WaitHint);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
void AddToMessageLog(char *msg);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//------------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
TFARMAPI string getLastErrorText();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//------------------------------------------------------------------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
class TFARMAPI TService
Toshihiro Shimizu 890ddd
{
Toshihiro Shimizu 890ddd
public:
Toshihiro Shimizu 890ddd
	TService(const string &name, const string &displayName);
Toshihiro Shimizu 890ddd
	virtual ~TService();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	static TService *instance();
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	enum Status {
Toshihiro Shimizu 890ddd
		Stopped = 1,
Toshihiro Shimizu 890ddd
		StartPending,
Toshihiro Shimizu 890ddd
		StopPending,
Toshihiro Shimizu 890ddd
		Running,
Toshihiro Shimizu 890ddd
		ContinuePending,
Toshihiro Shimizu 890ddd
		PausePending,
Toshihiro Shimizu 890ddd
		Paused
Toshihiro Shimizu 890ddd
	};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void setStatus(Status status, long exitCode, long waitHint);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	string getName() const;
Toshihiro Shimizu 890ddd
	string getDisplayName() const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	void run(int argc, char *argv[], bool console = false);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	virtual void onStart(int argc, char *argv[]) = 0;
Toshihiro Shimizu 890ddd
	virtual void onStop() = 0;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	bool isRunningAsConsoleApp() const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	static void start(const string &name);
Toshihiro Shimizu 890ddd
	static void stop(const string &name);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	static void install(
Toshihiro Shimizu 890ddd
		const string &name,
Toshihiro Shimizu 890ddd
		const string &displayName,
Toshihiro Shimizu 890ddd
		const TFilePath &appPath);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	static void remove(const string &name);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	static void addToMessageLog(const string &msg);
Toshihiro Shimizu 890ddd
	static void addToMessageLog(const QString &msg);
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Toshihiro Shimizu 890ddd
	class Imp;
Shinya Kitaoka 262a92
	std::unique_ptr<imp> m_imp;</imp>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
	static TService *m_instance;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#endif