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