+++ /dev/null
-/*
-This file is part of libmspframework
-Copyright © 2006 Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-#ifndef MSP_FRAMEWORK_APPLICATION_H_
-#define MSP_FRAMEWORK_APPLICATION_H_
-
-#include "event.h"
-#include "poller.h"
-#include "types.h"
-
-namespace Msp {
-
-/**
-Base class for applications. Inherit the main class from this and add a static
-member of type RegApp<MainClass>.
-*/
-class Application
-{
-public:
- Poller::Slot &add_pollable(Pollable *, short);
- EventManager::Event &create_event();
- virtual ~Application();
-
- static int run(int, char **);
- static void usage(const char *, bool);
-protected:
- enum TickMode
- {
- NONE, /// No ticks
- AFTER_POLL, /// One tick after each poll
- IDLE /// Constant torrent of ticks
- };
-
- class RegBase
- {
- public:
- virtual Application *create_app(int, char **)=0;
- virtual void usage(const char *, bool)=0;
- virtual ~RegBase() { }
- protected:
- RegBase();
- };
-
- template<typename T>
- class RegApp: public RegBase
- {
- public:
- Application *create_app(int argc, char **argv) { return new T(argc, argv); }
- void usage(const char *a, bool b) { T::usage(a,b); }
- };
-
- bool done;
- int exit_code;
-
- Application();
- virtual int main();
- void catch_signal(int);
- void set_tick_mode(TickMode);
- void exit(int);
- virtual void tick() { }
- virtual void sighandler(int) { }
-private:
- TickMode tick_mode_;
- Poller *poller_;
- EventManager *ev_mgr_;
- ThreadHandle main_tid;
-
- Application(const Application &);
- Application &operator=(const Application &);
-
- static RegBase *reg_app_;
- static Application *app_;
-
- static void sighandler_(int);
- static void sigalrm_(int) { }
-};
-
-} // namespace Msp
-
-#endif