Difference between revisions of "NaviTrack Tutorial:Creating module:Module structure"
(14 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | + | = Classes for normal module = | |
− | + | == Module class == | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | = Classes for module | ||
− | == Module class | ||
This class is used to configure and manage source and sink nodes. | This class is used to configure and manage source and sink nodes. | ||
Line 63: | Line 51: | ||
of the XML file, during starting up. | of the XML file, during starting up. | ||
You can put codes to initialize the module into this function. | You can put codes to initialize the module into this function. | ||
+ | void MyTutorialModule::init(StringTable& attributes, ConfigNode * localTree) | ||
+ | { | ||
+ | std::cout << "MyTutorialModule::init() is called." << std::endl; | ||
+ | |||
+ | std::string strName=attributes.get("name"); | ||
+ | std::cout << "MyTutorialModule::init(): attribute \"name\" is " | ||
+ | << strName << std::endl; | ||
+ | } | ||
+ | |||
+ | Also, you can get a parameter in configuration section of the XML file, | ||
+ | by calling attributes.get(<parameter name>); | ||
=== createNode() === | === createNode() === | ||
Line 73: | Line 72: | ||
if( name.compare("MyTutorialSink") == 0 ) | if( name.compare("MyTutorialSink") == 0 ) | ||
{ | { | ||
+ | std::string strName=attributes.get("name"); | ||
+ | std::cout << "MyTutorialModule::createNode(): creating a MyTutorialSink node" << std::endl; | ||
+ | std::cout << "MyTutorialModule::createNode(): attribute\"name\" is " << strName << std::endl; | ||
sink = new MyTutorialSink(); | sink = new MyTutorialSink(); | ||
return sink; | return sink; | ||
Line 78: | Line 80: | ||
if(name.compare("MyTutorialSource") == 0 ) | if(name.compare("MyTutorialSource") == 0 ) | ||
{ | { | ||
− | std::string | + | std::string strName=attributes.get("name"); |
− | source = new MyTutorialSource(); | + | std::cout << "MyTutorialModule::createNode(): creating a MyTutorialSource node" << std::endl; |
+ | std::cout << "MyTutorialModule::createNode(): attribute\"name\" is " << strName << std::endl; | ||
+ | source = new MyTutorialSource(strName); | ||
return source; | return source; | ||
} | } | ||
Line 90: | Line 94: | ||
You can get any parameters specified for a certain node in XML configuration file, | You can get any parameters specified for a certain node in XML configuration file, | ||
− | by | + | by calling attribute.get(<parameter name>) function, as shown in above code. |
=== pushEvent() and pullEvent() === | === pushEvent() and pullEvent() === | ||
Line 96: | Line 100: | ||
These are called whenever a push or pull event occurs. | These are called whenever a push or pull event occurs. | ||
− | == Sink class | + | == Sink class == |
This class is for a Sink node itself. | This class is for a Sink node itself. | ||
Line 124: | Line 128: | ||
} // end of namespace ot | } // end of namespace ot | ||
− | + | ||
− | #endif // end of __MY_TUTORIAL_SINK_H | + | #endif // end of __MY_TUTORIAL_SINK_H |
=== isEventGenerator() === | === isEventGenerator() === | ||
Line 135: | Line 139: | ||
This is an event handler for generated event. | This is an event handler for generated event. | ||
− | == Source class | + | == Source class == |
This class is a Source node itself. The following example class contains only essential functions for a Source node. | This class is a Source node itself. The following example class contains only essential functions for a Source node. | ||
Line 164: | Line 168: | ||
} // end of namespace ot | } // end of namespace ot | ||
− | + | ||
− | #endif // __MYTUTORIAL_SOURCE_H__ | + | #endif // __MYTUTORIAL_SOURCE_H__ |
=== isEventGenerator() === | === isEventGenerator() === |
Latest revision as of 23:16, 15 May 2007
Home < NaviTrack Tutorial:Creating module:Module structureContents
Classes for normal module
Module class
This class is used to configure and manage source and sink nodes.
The following example class contains only essential functions for a NaviTrack module.
MyTutorialModule.h:
#ifndef __MY_TUTORIAL_MODULE_H__ #define __MY_TUTORIAL_MODULE_H__ #include <OpenTracker/OpenTracker.h> #include <OpenTracker/dllinclude.h> #include <OpenTracker/input/SPLModules.h> #include <OpenTracker/input/MyTutorialSink.h> #include <OpenTracker/input/MyTutorialSource.h> #include <string> namespace ot { class OPENTRACKER_API MyTutorialModule : public Module, public NodeFactory { public: // Constructor and destructor MyTutorialModule(); virtual ~MyTutorialModule(); Node* createNode( const std::string& name, ot::StringTable& attributes); void pushEvent(); void pullEvent() {}; void init(StringTable&, ConfigNode *); private: MyTutorialSink* sink; MyTutorialSource* source; friend class MyTutorialSink; friend class MyTutorialSource; }; OT_MODULE(MyTutorialModule); } // end of namespace ot #endif // __MY_TUTORIAL_MODULE_H__
init()
Function init() is called when the NaviTrack detects MyTutorialConfig in configuration section of the XML file, during starting up. You can put codes to initialize the module into this function.
void MyTutorialModule::init(StringTable& attributes, ConfigNode * localTree) { std::cout << "MyTutorialModule::init() is called." << std::endl; std::string strName=attributes.get("name"); std::cout << "MyTutorialModule::init(): attribute \"name\" is " << strName << std::endl; }
Also, you can get a parameter in configuration section of the XML file, by calling attributes.get(<parameter name>);
createNode()
When the NaviTrack detects either MyTutorialSource or MyTutorialSink in the XML file, function createNode is called. The code for this function might be as following:
ot::Node * MyTutorialModule::createNode( const std::string& name, ot::StringTable& attributes) { if( name.compare("MyTutorialSink") == 0 ) { std::string strName=attributes.get("name"); std::cout << "MyTutorialModule::createNode(): creating a MyTutorialSink node" << std::endl; std::cout << "MyTutorialModule::createNode(): attribute\"name\" is " << strName << std::endl; sink = new MyTutorialSink(); return sink; } if(name.compare("MyTutorialSource") == 0 ) { std::string strName=attributes.get("name"); std::cout << "MyTutorialModule::createNode(): creating a MyTutorialSource node" << std::endl; std::cout << "MyTutorialModule::createNode(): attribute\"name\" is " << strName << std::endl; source = new MyTutorialSource(strName); return source; } return NULL; }
Note that the class in above example can have only one sink node and one source node. But you can manage more than two nodes with same type, by using array or vector, since createNode is called each time the NaviTrack detects the corresponding type of node.
You can get any parameters specified for a certain node in XML configuration file, by calling attribute.get(<parameter name>) function, as shown in above code.
pushEvent() and pullEvent()
These are a sort of event handling function. These are called whenever a push or pull event occurs.
Sink class
This class is for a Sink node itself. The following example class contains only essential functions for a Sink node.
MyTutorialSink.h:
#ifndef __MY_TUTORIAL_SINK_H__ #define __MY_TUTORIAL_SINK_H__ #include <OpenTracker/OpenTracker.h> namespace ot { class MyTutorialSink : public ot::Node { public: MyTutorialSink(); ~MyTutorialSink(); public: virtual int isEventGenerator() {return 1;}; virtual void onEventGenerated(Event&, Node&); }; } // end of namespace ot #endif // end of __MY_TUTORIAL_SINK_H
isEventGenerator()
This function lets NaviTrack know whether the node is event generating node.
It returns 1, if the node has event generator.
onEventGenerated()
This is an event handler for generated event.
Source class
This class is a Source node itself. The following example class contains only essential functions for a Source node.
MyTutorialSource.h:
#ifndef __MY_TUTORIAL_SOURCE_H__ #define __MY_TUTORIAL_SOURCE_H__ #include <OpenTracker/OpenTracker.h> #include <string> namespace ot { class MyTutorialSource : public Node { private: public: std::string StationName; public: MyTutorialSource(std::string stationName) {}; virtual int isEventGenerator() {return 1;}; int changed; Event event; }; } // end of namespace ot #endif // __MYTUTORIAL_SOURCE_H__
isEventGenerator()
This is same as isEventGenerator() in Sink class.
Go back to Creating module.