]> rtime.felk.cvut.cz Git - l4.git/blob - l4/pkg/mag/include/server/plugin
update
[l4.git] / l4 / pkg / mag / include / server / plugin
1 // vi:ft=cpp
2 /*
3  * (c) 2010 Alexander Warg <warg@os.inf.tu-dresden.de>
4  *     economic rights: Technische Universität Dresden (Germany)
5  *
6  * This file is part of TUD:OS and distributed under the terms of the
7  * GNU General Public License 2.
8  * Please see the COPYING-GPL-2 file for details.
9  */
10 #pragma once
11
12 #include <l4/mag/server/object>
13 #include <l4/mag/server/session>
14 #include <l4/re/video/goos>
15
16 #include <l4/cxx/hlist>
17 #include <l4/cxx/observer>
18
19 struct lua_State;
20
21 namespace Mag_gfx {
22 class Font;
23 }
24
25 namespace Mag_server {
26
27 class User_state;
28 class Input_source;
29
30 class Core_api
31 {
32 private:
33   User_state *_ust;
34   L4::Cap<void> _rcv_cap;
35   L4::Cap<L4Re::Video::Goos> _fb;
36   lua_State *_lua;
37   Mag_gfx::Font const *_label_font;
38
39   // not instanziatable
40   Core_api(Core_api const &);
41   void operator = (Core_api const &);
42
43 protected:
44   Core_api(lua_State *lua, User_state *u, L4::Cap<void> rcvc,
45            L4::Cap<L4Re::Video::Goos> fb, Mag_gfx::Font const *label_font);
46
47 public:
48   User_state *user_state() const { return _ust; }
49   L4::Cap<L4Re::Video::Goos> backend_fb() const { return _fb; }
50   Mag_gfx::Font const *label_font() const { return _label_font; }
51   lua_State *lua_state() const { return _lua; }
52   L4::Cap<void> rcv_cap() const { return _rcv_cap; }
53
54   virtual Registry *registry() const = 0;
55   virtual void set_session_options(Session *s, L4::Ipc::Istream &ios,
56                                    Session::Property_handler const *extra = 0) const;
57   virtual void get_refs_table() const;
58   virtual void add_input_source(Input_source *i) = 0;
59   virtual void register_session(Session *) const = 0;
60   virtual Session_list *sessions() const = 0;
61   virtual void add_session_observer(cxx::Observer *) const = 0;
62   virtual void get_ticks(cxx::Observer *) const = 0;
63 };
64
65 class Plugin
66 {
67 private:
68   friend class Plugin_manager;
69
70   char const *const _name;
71   unsigned _flags;
72   Plugin *_next;
73
74   static Plugin *_first;
75
76   Plugin(Plugin const &);
77   void operator = (Plugin const &);
78
79 protected:
80   unsigned &get_flags() { return _flags; }
81   Plugin(char const *name) : _name(name), _flags(0), _next(_first)
82   { _first = this; }
83
84 public:
85   enum Flag
86   {
87     F_started = 1
88   };
89
90   virtual char const *type() const { return "generic"; }
91   char const *name() const { return _name; }
92
93   bool started() const { return _flags & F_started; }
94
95   virtual void start(Core_api *) = 0;
96   virtual void stop() {}
97   virtual ~Plugin() {}
98 };
99
100 }