source: Plugins/dynamicResources/Monitor.cpp @ 31

Revision 31, 3.2 KB checked in by art, 12 years ago (diff)

dynamicResourceManagment Plugin added.

TODO: change file association list of resources. This is required
by the drm plugin to be able to reload the resource as soon as one of
the associated file changes.

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#include "Monitor.h"
14using namespace nrEngine;
15
16//if we are using linux system, then include inotify interface
17
18
19//----------------------------------------------------------------------------------
20Monitor::Monitor(Engine* root) : mRoot(root)
21{
22        setTaskName("DynamicResourceMonitor");
23       
24        #ifdef USE_INOTIFY
25        mFileDescriptor = 0;
26        #endif
27}
28
29
30//----------------------------------------------------------------------------------
31Monitor::~Monitor()
32{
33
34}
35
36//----------------------------------------------------------------------------------
37Result Monitor::onAddTask()
38{
39        // use inotify if supported
40        #ifdef USE_INOTIFY
41                return initInotify();
42        #endif
43
44       
45        // nothing supported, so return an error
46        return UNKNOWN_ERROR;
47}
48
49//----------------------------------------------------------------------------------
50Result Monitor::stopTask()
51{
52        // if we support inotify, then do
53        #ifdef USE_INOTIFY
54        close(mFileDescriptor);
55        NR_Log(Log::LOG_PLUGIN, "dynamicResources: Close inotify subsystem");
56        #endif
57       
58        // ok
59        return OK;
60}
61
62
63//----------------------------------------------------------------------------------
64#ifdef USE_INOTIFY
65Result Monitor::initInotify()
66{
67        // if we support inotify, then do
68        NR_Log(Log::LOG_PLUGIN, "dynamicResources: Use inotify interface for file monitoring");
69       
70        mFileDescriptor = inotify_init();
71        if (mFileDescriptor < 0)
72        {
73                NR_Log(Log::LOG_PLUGIN, "dynamicResources: There was an error by initilizing the inotify interafce");
74                return UNKNOWN_ERROR;
75        }
76       
77        // now scan through all resources, which are already loaded
78        const ResourceManager::ResourceGroupMap& res = mRoot->sResourceManager()->getResourceMap();
79        ResourceManager::ResourceGroupMap::const_iterator it = res.begin();
80        for (; it != res.end(); it++)
81        {
82                // for each group do
83                std::list<ResourceHandle>::const_iterator jt = it->second.begin();
84                for (; jt != it->second.end(); jt++)
85                {
86                        // get resource according to the handle
87                        IResourcePtr pr = mRoot->sResourceManager()->getByHandle(*jt);
88                       
89                        if (pr.valid())
90                        {
91                                // now get the file name associated with the resource
92                                pr.lockPure();
93                                const std::string& fileName = pr.getBase()->getResFileName();
94                                printf("found %s - %s\n", pr.getBase()->getResName().c_str(), fileName.c_str());
95                                pr.unlockPure();
96                               
97                        }else{
98                                printf("warning\n");
99                        }
100                       
101                }
102        }
103       
104       
105        // ok
106        return OK;
107}
108#endif
109
110//----------------------------------------------------------------------------------
111Result Monitor::updateTask()
112{
113
114        return OK;
115}
Note: See TracBrowser for help on using the repository browser.