// vi:ft=cpp /* * (c) 2010 Alexander Warg * economic rights: Technische Universität Dresden (Germany) * * This file is part of TUD:OS and distributed under the terms of the * GNU General Public License 2. * Please see the COPYING-GPL-2 file for details. */ #pragma once #include #include #include struct lua_State; namespace Mag_server { class User_state; class Core_api; class Core_api { private: Input_source *_input; Registry *_reg; User_state *_ust; L4::Cap _rcv_cap; L4::Cap _fb; lua_State *_lua; // not instanziatable Core_api(Core_api const &); void operator = (Core_api const &); public: Core_api(Registry *r, lua_State *lua, User_state *u, L4::Cap rcvc, L4::Cap fb); Registry *registry() const { return _reg; } User_state *user_state() const { return _ust; } Input_source *input_sources() const { return _input; } L4::Cap backend_fb() const { return _fb; } void get_refs_table() const; void add_input_source(Input_source *i); lua_State *lua_state() const { return _lua; } L4::Cap rcv_cap() const { return _rcv_cap; } }; class Plugin { private: friend class Plugin_manager; char const *const _name; unsigned _flags; Plugin *_next; static Plugin *_first; Plugin(Plugin const &); void operator = (Plugin const &); protected: unsigned &get_flags() { return _flags; } Plugin(char const *name) : _name(name), _flags(0), _next(_first) { _first = this; } public: enum Flag { F_started = 1 }; virtual char const *type() const { return "generic"; } char const *name() const { return _name; } bool started() const { return _flags & F_started; } virtual void start(Core_api *) = 0; virtual void stop() {} virtual ~Plugin() {} }; }