#include /*! \brief mdHost * General abstraction of all MD clients * * For historical reasons all clients are considered to be * devices. The central device of the system has zero * device type. * */ using namespace std; using boost::asio::ip::udp; template class mdHost { public: bool isSingleton; int clieverGroup, // masterDaemonConfig.thisMachineContext handle,mdStdDevIdx; md_device type; mdState state; udp::endpoint ip; // Superset of the RFC speced InstructionSet cmds; // Some parameters initially here are now all uniformly ODEs // defined in the COOL scripts. ~mdHost() {} mdHost(md_device t) : type(t) {clieverGroup = handle = mdStdDevIdx = -1;} T* registeR(md_device t); void registerCmd(const char *cmdName,const mdIncoming &mdI); }; class mdClientServer; class mdClientServer : public mdHost { public: mdClientServer() : mdHost( MDDEV_CD ) {}; mdClientServer *validateClient(int handle, mdResponse &r); }; class mdMachine; class mdMachine : public mdHost { public: mdMachine() : mdHost( MACHINE ) {} mdMachine *validateClient(int handle, const mdClientBirth &c, mdResponse &r); void registerCmd(const char *cmdName,const mdIncoming &mdI); }; class mdPeer; class mdPeer : public mdHost { public: mdPeer() : mdHost( MDDEV_PEER ) { cmds["RST"] = new mdCommand((md_mand)0,std::string("RST")); } mdPeer *validateClient(int handle, const mdClientBirth &c, mdResponse &r); void registerCmd(const char *cmdName,const mdIncoming &mdI); }; class masterDaemon; class mdHostFabrik : public mdHost {public: mdHostFabrik() : mdHost( MDDEV_MD ) {} void newFromHeartbeat(const mdClientBirth &itsAWhat); std::string newFromAPI(md_device type,std::string signature); };