/home/fwph/code/wurde/rde/core/CommsManager.H

Go to the documentation of this file.
00001 
00030 #ifndef _WURDE_COMMS_MANAGER_H
00031 #define _WURDE_COMMS_MANAGER_H
00032 
00033 #include <CommsHelper.H>
00034 #include <Capability.H>
00035 #include <WURDEConfiguration.H>
00036 #include <Heartbeat.H>
00037 #include <McpRequest.H>
00038 #include <Trigger.H>
00039 #include <vector>
00040 #include <string>
00041 #include <unistd.h>
00042 #include <map>
00043 
00044 
00045 
00046 //it pains me to define this number, but every solution is ugly.
00047 #define MAX_INTERFACES 128
00048 
00049 namespace WURDE {
00050 
00051         /* a few forward declarations are necessary here */
00052         class Capability;
00053         class CommsHelper;
00054         class Heartbeat;
00055         class McpRequest;
00056         
00066         class CommsManager {
00067                 
00068         public:
00073                 CommsManager(std::string name);
00074                 
00080                 CommsManager(std::string name,Protocols defaultProt);
00081                 ~CommsManager(){};
00082                 
00086                 void setName(std::string name);
00087                 
00091                 void initialize();
00092                 
00098                 RunState runUpdate();
00099                 
00104                 void registerObject(Capability *someObject);
00105                 
00112                 void deregister(Capability *someObject);
00113                 
00117                 void registerSupplier(Capability *someObject);
00118                 
00122                 void registerConsumer(Capability *someObject);
00123                 
00128                 void cleanUp();
00129                 
00134                 RunState getState(){ return m_currState;};
00135                 void setIdle();
00136                 void setQuit();
00137                 void setReset();
00138                 void setRun();
00139                 void setRestart();
00140                 
00141                 void setInfoState();
00142                 
00146                 void setGlobalConfigFile(std::string val){m_globalConfigFile=val;}
00147                 
00151                 std::string getName(){return m_name;};
00152                 
00156                 std::string getRealName(){ return m_realName;}
00157                
00158                 void setRealName(std::string name){ m_realName=name;}
00159                
00160                 void setHelpString(std::string helpstring){m_helpstring=helpstring;}
00164                 void setNoSleep(){m_doSleep=false;};
00165                 
00169                 void setSleep(double seconds);
00170                 
00174                 void setMinSleep(double seconds);
00175                 
00179                 void setSleepOnly(double seconds);
00180 
00185                 void setHeartbeatOnly(double seconds);
00186 
00190                 void setNoHeartbeat(){m_doHeartbeat=false;};
00191                 
00195                 void setPreSleep(){preSleep=true;};
00196 
00200                 void setPostSleep(){preSleep=false;};
00201                 
00207                 void setTriggerMode(bool val){onlyTrigger=val;};
00208                 
00213                 bool checkTriggers(Capability *someobject);
00214                 
00218                 bool activeTrigger();
00219                 
00223                 void addTrigger(Trigger someTrigger){triggerList.push_back(someTrigger);};
00224                 
00228                 void resetTriggers();
00229                 
00233                 void setMcpRequestMode(bool val){m_doMcpRequests=val;};
00234                 
00239                 void setIdleDataProcessing(bool val){m_doIdleProcessing=val;};
00240                 
00246                 void parseOptions(int argc, char *argv[]);
00247                 
00256                 void parseOptions(int argc, char *argv[],char *optstring);
00257                 //multimap<char, string> parseOptions(int argc, char *argv[],char *optstring);
00258                 
00264                 void sendInfo();
00265 
00266                 // needed when we fork MCP-- commshelpers must close any handles which might cause problems
00267                 void closeConnections(){myCommsHelper->closeConnections();}
00268                 
00269         protected:
00270                 void handleMCPReply(McpRequestInfoStruct someinfo);
00271                 
00272         private:
00273                 
00274                 void sleep();
00275                 void updateObjects();
00276                 void handleMCP();
00277                 
00278                 // Name as bound to WURDE. ie, TomRFlexServer
00279                 string m_name;
00280                 // General name of the module. ie, RFlexServer
00281                 string m_realName;
00282                 // usage string to be displayed after WURDE usage information when invoked with -h
00283                 string m_helpstring;
00284                 bool initialized;
00285                 
00286                 // the various commshelpers
00287                 CommsHelper *myCommsHelper;
00288                 
00289                 RunState state;
00290                 
00291                 McpRequest m_mcpRequest;              
00292                 Heartbeat m_heartbeat;
00293                 Protocols defaultProtocol;
00294                 //vector<CapabilityContainer> objectList;
00295                 vector<Capability*> objectList;
00296                 vector<Trigger> triggerList;
00297                 
00304                 //              std::map<std::string,int> m_counters;
00305                 //              unsigned int m_counters[MAX_INTERFACES*2];
00306                 
00311                 //              std::map<std:string,int> m_supplyCounters;
00312                 //              unsigned int m_supplyCounters[MAX_INTERFACES*2];
00313                 
00314                 struct timespec sleepInterval;
00315                 bool m_doSleep;
00316                 bool m_doHeartbeat;
00317                 bool m_doMcpRequests;
00318                 bool m_doIdleProcessing;
00319                 bool m_laxRequests;
00320                 bool m_nameServiceOverride;
00321                 bool preSleep;
00322                 bool onlyTrigger;
00323                 
00324                 std::string m_globalConfigFile;
00325                 RunState m_currState;
00326                 Time endsleep;
00327                 Time minSleep;
00328         };
00329 
00330         extern CommsManager *g_globalCommsManager_ptr;
00331 
00332         bool registerSupplier(Capability *someObject);
00333         bool registerConsumer(Capability *someObject);          
00334 }
00335 
00339 typedef WURDE::CommsHelper *commshelperloader_ptr(std::string name);
00340 
00344 extern std::map<std::string, commshelperloader_ptr *, std::less<std::string> > commsHelperFactory;      
00345 
00346 
00347 #endif

Generated on Thu Feb 1 15:31:54 2007 for WURDE by  doxygen 1.5.1