source: Plugins/dynamicResources/Monitor.h @ 32

Revision 32, 2.6 KB checked in by art, 12 years ago (diff)
Line 
1/***************************************************************************
2 *                                                                         *
3 *   (c) Art Tevs, MPI Informatik Saarbruecken                             *
4 *       mailto: <tevs@mpi-sb.mpg.de>                                      *
5 *                                                                         *
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     *
9 *   (at your option) any later version.                                   *
10 *                                                                         *
11 ***************************************************************************/
12
13
14#ifndef _NR_MONITOR_TASK_H_
15#define _NR_MONITOR_TASK_H_
16
17
18//----------------------------------------------------------------------------------
19// Includes
20//----------------------------------------------------------------------------------
21#include <nrEngine/nrEngine.h>
22using namespace nrEngine;
23
24
25#if NR_PLATFORM == NR_PLATFORM_LINUX
26        #include "inotify-cxx.h"
27        #define USE_INOTIFY
28#endif
29
30
31/**
32 * This class does monitor all loaded resources and will notify the
33 * resource loader if file has changed, so that the file could be reloaded.
34 **/
35class Monitor : public ITask
36{
37        public:
38
39                //! Create monitoring instance
40                Monitor(Engine*);
41               
42                //! Release the instance
43                ~Monitor();
44               
45                //! Calls when the task is finished
46                Result stopTask();     
47               
48                //! Initialize the task, cause ti was added to the kernel
49                Result onStartTask();
50               
51                //! Update the task
52                Result updateTask() { return update();}
53
54
55        private:
56       
57                //! Engine pointer
58                Engine* mRoot;
59               
60                //! Initialize the monitor
61                void init();
62               
63                //! Update the monitoring interface
64                Result update();
65               
66                //! Add new file and associated resource to watch on
67                void addMonitor (IResourcePtr res, const std::string& file);
68
69                // We are using inotify interface
70                #ifdef USE_INOTIFY
71               
72                        //! file descriptor
73                        SharedPtr<Inotify> mInotify;
74                       
75                        //! To watch we use this structures
76                        typedef struct _WatchData
77                        {
78                                IResourcePtr resource;
79                                SharedPtr<InotifyWatch> watcher;
80                                std::string resourceName;
81                        } WatchData;
82                       
83                        //! Define map type for appropriate storing of watch descriptors
84                        typedef std::map<int, WatchData > WatcherMap;
85                       
86                        //! Here we store the watching descriptors for the files
87                        WatcherMap mWatchMap;
88                       
89                        //! Initialize inotify interface
90                        Result initInotify();
91                #endif
92               
93};
94
95
96#endif
Note: See TracBrowser for help on using the repository browser.