3
* Ekiga -- A VoIP and Video-Conferencing application
4
* Copyright (C) 2000-2009 Damien Sandras <dsandras@seconix.com>
6
* This program is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; either version 2 of the License, or (at
9
* your option) any later version. This program is distributed in the hope
10
* that it will be useful, but WITHOUT ANY WARRANTY; without even the
11
* implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
* See the GNU General Public License for more details.
14
* You should have received a copy of the GNU General Public License along
15
* with this program; if not, write to the Free Software Foundation, Inc.,
16
* 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA.
18
* Ekiga is licensed under the GPL license and as a special exception, you
19
* have permission to link or otherwise combine this program with the
20
* programs OPAL, OpenH323 and PWLIB, and distribute the combination, without
21
* applying the requirements of the GNU GPL to the OPAL, OpenH323 and PWLIB
22
* programs, as long as you do follow the requirements of the GNU GPL for all
23
* the rest of the software thus combined.
28
* kickstart.h - description
29
* ------------------------------------------
30
* begin : written in 2009 by Julien Puydt
31
* copyright : (c) 2009 by Julien Puydt
32
* description : declaration of a kickstart object
36
#ifndef __KICKSTART_H__
37
#define __KICKSTART_H__
39
/* We want the engine startup to be as automatic as possible -- in particular,
40
* it should handle dependancies as transparently as possible so external
41
* plugins work correctly.
43
* This kickstart object works like this : some objects are registered to it,
44
* and are responsible of initializing a portion of code. Those objects are
45
* called sparks, and have basically three states :
46
* - blank -- they haven't managed to initialize anything yet ;
47
* - partial -- they have initialized something, but could do more ;
48
* - full -- they have initialized all they could.
50
* This means that a spark object will have a method which will try to
51
* initialize more, and a method which will tell in which state it is : indeed,
52
* the kickstart object will need to know when it reached a point where all
53
* sparks have done as much as they could, so we need a strictly increasing
54
* function up until then.
56
* We want the following to be guaranteed by each Spark implementation :
57
* - if try_initialize_more returns 'true', then the state should be at least
59
* - try_initialize_more shouldn't return 'true' if no new service could be
61
* - states should always evolve as BLANK -> PARTIAL -> FULL : no coming back!
71
typedef enum { BLANK, PARTIAL, FULL } state;
75
virtual bool try_initialize_more (ServiceCore& core,
79
virtual state get_state () const = 0;
81
// this method is useful for debugging purposes
82
virtual const std::string get_name () const = 0;
93
void add_spark (boost::shared_ptr<Spark>& spark);
95
/* try to do more with the known blank/partial sparks */
96
void kick (Ekiga::ServiceCore& core,
101
std::list<boost::shared_ptr<Spark> > blanks;
102
std::list<boost::shared_ptr<Spark> > partials;