Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/consolecommands/src/libraries/core/TclThreadManager.h @ 6372

Last change on this file since 6372 was 6183, checked in by rgrieder, 15 years ago

Added preUpdate and postUpdate methods for all classes inheriting Singleton. Replaced update() with preUpdate except for the GraphicsManager (postUpdate).
However this does not apply to the Client and Server singletons in the network library. We should think about putting them in a scope as well.

  • Property svn:eol-style set to native
File size: 4.4 KB
Line 
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
29#ifndef _TclThreadManager_H__
30#define _TclThreadManager_H__
31
32#include "CorePrereqs.h"
33
34#include <cassert>
35#include <list>
36#include <map>
37#include <string>
38
39#include "util/Singleton.h"
40#include "OrxonoxClass.h"
41
42struct Tcl_Interp;
43
44namespace orxonox
45{
46    class _CoreExport TclThreadManager : public Singleton<TclThreadManager>, public OrxonoxClass
47    {
48        friend class Singleton<TclThreadManager>;
49        friend class TclBind;
50        friend _CoreExport void tclThread(TclInterpreterBundle* bundle, std::string command);
51        friend _CoreExport void sourceThread(std::string file);
52        friend _CoreExport int Tcl_OrxonoxAppInit(Tcl_Interp* interp);
53
54        public:
55            TclThreadManager(Tcl::interpreter* interpreter);
56            virtual ~TclThreadManager();
57
58            static unsigned int      create();
59            static Tcl::interpreter* createWithId(unsigned int id);
60            static void              destroy(unsigned int id);
61            static void              execute(unsigned int target_id, const std::string& command);
62            static std::string       query(unsigned int target_id, const std::string& command);
63            static void              source(const std::string& file);
64
65            static void error(const std::string& error);
66            static void debug(const std::string& error);
67
68            void preUpdate(const Clock& time);
69
70            std::list<unsigned int> getThreadList() const;
71
72        private:
73            static void tcl_execute(const Tcl::object& args);
74            static void tcl_crossexecute(int target_id, const Tcl::object& args);
75            static std::string tcl_query(int source_id, const Tcl::object& args);
76            static std::string tcl_crossquery(int source_id, int target_id, const Tcl::object& args);
77            static bool tcl_running(int id);
78
79            void _execute(unsigned int target_id, const std::string& command);
80            std::string _query(unsigned int source_id, unsigned int target_id, const std::string& command, bool bUseCommandExecutor = false);
81
82            TclInterpreterBundle* getInterpreterBundle(unsigned int id);
83            std::string dumpList(const std::list<unsigned int>& list);
84
85            static void initialize(TclInterpreterBundle* bundle);
86            static std::string eval(TclInterpreterBundle* bundle, const std::string& command, const std::string& action);
87
88            static TclThreadManager* singletonPtr_s;                            ///< Singleton pointer
89
90            unsigned int numInterpreterBundles_;                                ///< Number of created Tcl-interpreters (only used for auto-numbered interpreters, not affected by @ref createWithId)
91            std::map<unsigned int, TclInterpreterBundle*> interpreterBundles_;  ///< A map containing all Tcl-interpreters
92            boost::shared_mutex* interpreterBundlesMutex_;                      ///< A mutex used to synchronize threads when accessing @ref interpreterBundles_
93            TclThreadList<std::string>* messageQueue_;                          ///< A queue to pass messages from Tcl-threads to the main thread
94            boost::mutex* mainInterpreterMutex_;                                ///< A mutex to synchronize queries to the main interpreter
95    };
96
97    _CoreExport void tclThread(TclInterpreterBundle* bundle, std::string command);
98    _CoreExport void sourceThread(std::string file);
99    _CoreExport int Tcl_OrxonoxAppInit(Tcl_Interp* interp);
100}
101
102#endif /* _TclThreadManager_H__ */
Note: See TracBrowser for help on using the repository browser.