PageRenderTime 35ms CodeModel.GetById 16ms app.highlight 14ms RepoModel.GetById 2ms app.codeStats 0ms

/vp_plugins/qtservice-2.6_1-opensource/src/qtservice.h

http://cupsfilter.googlecode.com/
C++ Header | 197 lines | 115 code | 37 blank | 45 comment | 3 complexity | 60f37442215b442433465d6bc649d49b MD5 | raw file
  1/****************************************************************************
  2** 
  3** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
  4** All rights reserved.
  5** Contact: Nokia Corporation (qt-info@nokia.com)
  6** 
  7** This file is part of a Qt Solutions component.
  8**
  9** Commercial Usage  
 10** Licensees holding valid Qt Commercial licenses may use this file in
 11** accordance with the Qt Solutions Commercial License Agreement provided
 12** with the Software or, alternatively, in accordance with the terms
 13** contained in a written agreement between you and Nokia.
 14** 
 15** GNU Lesser General Public License Usage
 16** Alternatively, this file may be used under the terms of the GNU Lesser
 17** General Public License version 2.1 as published by the Free Software
 18** Foundation and appearing in the file LICENSE.LGPL included in the
 19** packaging of this file.  Please review the following information to
 20** ensure the GNU Lesser General Public License version 2.1 requirements
 21** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
 22** 
 23** In addition, as a special exception, Nokia gives you certain
 24** additional rights. These rights are described in the Nokia Qt LGPL
 25** Exception version 1.1, included in the file LGPL_EXCEPTION.txt in this
 26** package.
 27** 
 28** GNU General Public License Usage 
 29** Alternatively, this file may be used under the terms of the GNU
 30** General Public License version 3.0 as published by the Free Software
 31** Foundation and appearing in the file LICENSE.GPL included in the
 32** packaging of this file.  Please review the following information to
 33** ensure the GNU General Public License version 3.0 requirements will be
 34** met: http://www.gnu.org/copyleft/gpl.html.
 35** 
 36** Please note Third Party Software included with Qt Solutions may impose
 37** additional restrictions and it is the user's responsibility to ensure
 38** that they have met the licensing requirements of the GPL, LGPL, or Qt
 39** Solutions Commercial license and the relevant license of the Third
 40** Party Software they are using.
 41** 
 42** If you are unsure which license is appropriate for your use, please
 43** contact Nokia at qt-info@nokia.com.
 44** 
 45****************************************************************************/
 46
 47#ifndef QTSERVICE_H
 48#define QTSERVICE_H
 49
 50#include <QtCore/QCoreApplication>
 51
 52#if defined(Q_WS_WIN)
 53#  if !defined(QT_QTSERVICE_EXPORT) && !defined(QT_QTSERVICE_IMPORT)
 54#    define QT_QTSERVICE_EXPORT
 55#  elif defined(QT_QTSERVICE_IMPORT)
 56#    if defined(QT_QTSERVICE_EXPORT)
 57#      undef QT_QTSERVICE_EXPORT
 58#    endif
 59#    define QT_QTSERVICE_EXPORT __declspec(dllimport)
 60#  elif defined(QT_QTSERVICE_EXPORT)
 61#    undef QT_QTSERVICE_EXPORT
 62#    define QT_QTSERVICE_EXPORT __declspec(dllexport)
 63#  endif
 64#else
 65#  define QT_QTSERVICE_EXPORT
 66#endif
 67
 68class QStringList;
 69class QtServiceControllerPrivate;
 70
 71class QT_QTSERVICE_EXPORT QtServiceController
 72{
 73    Q_DECLARE_PRIVATE(QtServiceController)
 74public:
 75    enum StartupType
 76    {
 77	    AutoStartup = 0, ManualStartup
 78    };
 79
 80    QtServiceController(const QString &name);
 81    virtual ~QtServiceController();
 82
 83    bool isInstalled() const;
 84    bool isRunning() const;
 85
 86    QString serviceName() const;
 87    QString serviceDescription() const;
 88    StartupType startupType() const;
 89    QString serviceFilePath() const;
 90
 91    static bool install(const QString &serviceFilePath, const QString &account = QString(),
 92                const QString &password = QString());
 93    bool uninstall();
 94
 95    bool start(const QStringList &arguments);
 96    bool start();
 97    bool stop();
 98    bool pause();
 99    bool resume();
100    bool sendCommand(int code);
101
102private:
103    QtServiceControllerPrivate *d_ptr;
104};
105
106class QtServiceBasePrivate;
107
108class QT_QTSERVICE_EXPORT QtServiceBase
109{
110    Q_DECLARE_PRIVATE(QtServiceBase)
111public:
112
113    enum MessageType
114    {
115	Success = 0, Error, Warning, Information
116    };
117
118    enum ServiceFlag
119    {
120        Default = 0x00,
121        CanBeSuspended = 0x01,
122        CannotBeStopped = 0x02
123    };
124
125    Q_DECLARE_FLAGS(ServiceFlags, ServiceFlag)
126
127    QtServiceBase(int argc, char **argv, const QString &name);
128    virtual ~QtServiceBase();
129
130    QString serviceName() const;
131
132    QString serviceDescription() const;
133    void setServiceDescription(const QString &description);
134
135    QtServiceController::StartupType startupType() const;
136    void setStartupType(QtServiceController::StartupType startupType);
137
138    ServiceFlags serviceFlags() const;
139    void setServiceFlags(ServiceFlags flags);
140
141    int exec();
142
143    void logMessage(const QString &message, MessageType type = Success,
144                int id = 0, uint category = 0, const QByteArray &data = QByteArray());
145
146    static QtServiceBase *instance();
147
148protected:
149
150    virtual void start() = 0;
151    virtual void stop();
152    virtual void pause();
153    virtual void resume();
154    virtual void processCommand(int code);
155
156    virtual void createApplication(int &argc, char **argv) = 0;
157
158    virtual int executeApplication() = 0;
159
160private:
161
162    friend class QtServiceSysPrivate;
163    QtServiceBasePrivate *d_ptr;
164};
165
166template <typename Application>
167class QtService : public QtServiceBase
168{
169public:
170    QtService(int argc, char **argv, const QString &name)
171        : QtServiceBase(argc, argv, name), app(0)
172    {  }
173    ~QtService()
174    {
175    }
176
177protected:
178    Application *application() const
179    { return app; }
180
181    virtual void createApplication(int &argc, char **argv)
182    {
183        app = new Application(argc, argv);
184        QCoreApplication *a = app;
185        Q_UNUSED(a);
186    }
187
188    virtual int executeApplication()
189    { return Application::exec(); }
190
191private:
192    Application *app;
193};
194
195Q_DECLARE_OPERATORS_FOR_FLAGS(QtServiceBase::ServiceFlags)
196
197#endif // QTSERVICE_H