// Ryzom - MMORPG Framework // Copyright (C) 2010 Winch Gate Property Limited // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see . #ifndef GUS_MODULE_H #define GUS_MODULE_H //----------------------------------------------------------------------------- // includes //----------------------------------------------------------------------------- #include "nel/misc/types_nl.h" #include "nel/misc/sstring.h" #include "nel/misc/smart_ptr.h" #include "nel/net/unified_network.h" #include "gus_net_types.h" //----------------------------------------------------------------------------- // GUS namespace //----------------------------------------------------------------------------- namespace GUS { //----------------------------------------------------------------------------- // class IModule //----------------------------------------------------------------------------- class IModule: public NLMISC::CRefCount { public: // Derived classes should only be instanciated by the registerModule() routine // the IModule ctor asserts at run time if called outside the context of the // registerModule() routine IModule(); // virtual dtor virtual ~IModule(); // init and release methods virtual bool initialiseModule(const NLMISC::CSString& rawArgs)=0; virtual void release() {} // methods called at the service update and tick update virtual void tickUpdate(NLMISC::TGameCycle tickNumber) {} virtual void serviceUpdate(NLMISC::TTime localTime) {} // methods called on reception of serviceUp/ serviceDown messages from the naming service virtual void serviceUp(NLNET::TServiceId serviceId,const std::string& serviceName) {} virtual void serviceDown(NLNET::TServiceId serviceId,const std::string& serviceName) {} // methods called as new modules are registered accross the GUSNET network virtual void moduleUp(GUSNET::CRemoteModuleViaConnection* remoteModule) {} virtual void moduleDown(GUSNET::CRemoteModuleViaConnection* remoteModule) {} // method called to service incoming messages virtual void receiveModuleMessage(GUSNET::CModuleMessage& msg) {} // method to retrieve & display the name, description and state of the module virtual NLMISC::CSString getState() const=0; virtual NLMISC::CSString getName() const=0; virtual NLMISC::CSString getParameters() const=0; virtual void displayModule() const=0; }; typedef NLMISC::CSmartPtr TModulePtr; //----------------------------------------------------------------------------- // utility Routines //----------------------------------------------------------------------------- // extract a named parameter from a string // input string is formated as: abc(def) ghi(123) klm("this is it:(") nop(a(),b()) // - extractNamedParameter("abc",s) returns: def // - extractNamedParameter("ghi",s) returns: 123 // - extractNamedParameter("klm",s) returns: "this is it:(" // - extractNamedParameter("nop",s) returns: a(),b() NLMISC::CSString extractNamedParameter(const NLMISC::CSString& argName,NLMISC::CSString rawArgs); // extract a named path parameter from a string // this is a wrapper round extractNamedParameter which looks after stripping quotes and normalising the // path as required - the result is a linux-style path // - extractNamedPathParameter("path","name(toto) path("c:\\abcd\\def.ghi") returns: c:/abcd/def.ghi NLMISC::CSString extractNamedPathParameter(const NLMISC::CSString& argName,NLMISC::CSString rawArgs); } //----------------------------------------------------------------------------- #endif