Orxonox  0.0.5 Codename: Arcturus
TclThreadManager.h
Go to the documentation of this file.
1 /*
2  * ORXONOX - the hottest 3D action shooter ever to exist
3  * > www.orxonox.net <
4  *
5  *
6  * License notice:
7  *
8  * This program is free software; you can redistribute it and/or
9  * modify it under the terms of the GNU General Public License
10  * as published by the Free Software Foundation; either version 2
11  * of the License, or (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
21  *
22  * Author:
23  * Fabian 'x3n' Landau
24  * Co-authors:
25  * ...
26  *
27  */
28 
35 #ifndef _TclThreadManager_H__
36 #define _TclThreadManager_H__
37 
38 #include "core/CorePrereqs.h"
39 
40 #include <cassert>
41 #include <list>
42 #include <map>
43 #include <string>
44 
45 #include "util/Singleton.h"
46 
47 struct Tcl_Interp;
48 
49 namespace orxonox
50 {
51  class _CoreExport TclThreadManager : public Singleton<TclThreadManager>
52  {
53  friend class Singleton<TclThreadManager>;
54  friend class TclBind;
55  friend _CoreExport void tclThread(TclInterpreterBundle* bundle, const std::string& command);
56  friend _CoreExport void sourceThread(const std::string& file);
57  friend _CoreExport int Tcl_OrxonoxAppInit(Tcl_Interp* interp);
58 
59  public:
60  TclThreadManager(Tcl::interpreter* interpreter);
61  virtual ~TclThreadManager();
62 
63  static unsigned int create();
64  static Tcl::interpreter* createWithId(unsigned int id);
65  static void destroy(unsigned int id);
66  static void execute(unsigned int target_id, const std::string& command);
67  static std::string query(unsigned int target_id, const std::string& command);
68  static void source(const std::string& file);
69 
70  static void error(const std::string& error);
71  static void debug(const std::string& error);
72 
73  void preUpdate(const Clock& time);
74 
75  std::list<unsigned int> getThreadList() const;
76 
77  private:
78  static void tcl_execute(const Tcl::object& args);
79  static void tcl_crossexecute(int target_id, const Tcl::object& args);
80  static std::string tcl_query(int source_id, const Tcl::object& args);
81  static std::string tcl_crossquery(int source_id, int target_id, const Tcl::object& args);
82  static bool tcl_running(int id);
83 
84  void _execute(unsigned int target_id, const std::string& command);
85  std::string _query(unsigned int source_id, unsigned int target_id, const std::string& command, bool bUseCommandExecutor = false);
86 
87  TclInterpreterBundle* getInterpreterBundle(unsigned int id);
88  std::string dumpList(const std::list<unsigned int>& list);
89 
90  static void initialize(TclInterpreterBundle* bundle);
91  static std::string eval(TclInterpreterBundle* bundle, const std::string& command, const std::string& action);
92 
94 
95  unsigned int numInterpreterBundles_;
96  std::map<unsigned int, TclInterpreterBundle*> interpreterBundles_;
97  boost::shared_mutex* interpreterBundlesMutex_;
99  boost::mutex* mainInterpreterMutex_;
100  };
101 
103  _CoreExport void sourceThread(const std::string& file);
104  _CoreExport int Tcl_OrxonoxAppInit(Tcl_Interp* interp);
105 }
106 
107 #endif /* _TclThreadManager_H__ */
void tclThread(TclInterpreterBundle *bundle, const std::string &command)
The main function of the thread.
Definition: TclThreadManager.cc:608
void source(const std::string &filename)
Reads the content of a file and executes the commands in it line by line.
Definition: ConsoleCommandCompilation.cc:167
void error(const std::string &text)
Prints output with error level.
Definition: ConsoleCommandCompilation.cc:145
void debug(const std::string &text)
Prints debug output with verbose level.
Definition: ConsoleCommandCompilation.cc:161
Shared library macros, enums, constants and forward declarations for the core library ...
::std::string string
Definition: gtest-port.h:756
std::map< unsigned int, TclInterpreterBundle * > interpreterBundles_
A map containing all Tcl-interpreters.
Definition: TclThreadManager.h:96
boost::mutex * mainInterpreterMutex_
A mutex to synchronize queries to the main interpreter.
Definition: TclThreadManager.h:99
The MetaPickup destroys all the PickupCarriers&#39; Pickupables.
int Tcl_OrxonoxAppInit(Tcl_Interp *interp)
A tcl-init hook to inject the non-interactive Tcl-interpreter into the TclThreadManager.
Definition: TclThreadManager.cc:647
unsigned int numInterpreterBundles_
Number of created Tcl-interpreters (only used for auto-numbered interpreters, not affected by createW...
Definition: TclThreadManager.h:95
static TclThreadManager * singletonPtr_s
Singleton pointer.
Definition: TclThreadManager.h:93
Base for singleton classes.
Definition: Singleton.h:114
A wrapper class for a Tcl interpreter.
Definition: TclBind.h:98
Die Wagnis Klasse hat die folgenden Aufgaben:
Definition: ApplicationPaths.cc:66
ARGUMENT_COMPLETION_FUNCTION_IMPLEMENTATION_MULTI() command(const std::string &fragment)
Returns a list of commands and groups and also supports auto-completion of the arguments of these com...
Definition: ArgumentCompletionFunctions.cc:178
#define _CoreExport
Definition: CorePrereqs.h:61
TclThreadList< std::string > * messageQueue_
A queue to pass messages from Tcl-threads to the main thread.
Definition: TclThreadManager.h:98
void sourceThread(const std::string &file)
The main function of a non-interactive source thread.
Definition: TclThreadManager.cc:621
Definition of the Singleton template that is used as base class for classes that allow only one insta...
Simple real time clock based on Ogre::Timer.
Definition: Clock.h:57
Definition: TclThreadManager.h:51
boost::shared_mutex * interpreterBundlesMutex_
A mutex used to synchronize threads when accessing interpreterBundles_.
Definition: TclThreadManager.h:97
A struct containing all information about a Tcl-interpreter.
Definition: TclThreadManager.cc:66