/** * @file lldispatcher.h * @brief LLDispatcher class header file. * * Copyright (c) 2004-$CurrentYear$, Linden Research, Inc. * $License$ */ #ifndef LL_LLDISPATCHER_H #define LL_LLDISPATCHER_H #include #include #include class LLDispatcher; class LLMessageSystem; class LLUUID; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Class LLDispatchHandler // // Abstract base class for handling dispatches. Derive your own // classes, construct them, and add them to the dispatcher you want to // use. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ class LLDispatchHandler { public: typedef std::vector sparam_t; //typedef std::vector iparam_t; LLDispatchHandler() {} virtual ~LLDispatchHandler() {} virtual bool operator()( const LLDispatcher* dispatcher, const std::string& key, const LLUUID& invoice, const sparam_t& string) = 0; //const iparam_t& integers) = 0; }; //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Class LLDispatcher // // Basic utility class that handles dispatching keyed operations to // function objects implemented as LLDispatchHandler derivations. //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ class LLDispatcher { public: typedef std::string key_t; typedef std::vector keys_t; typedef std::vector sparam_t; //typedef std::vector iparam_t; // construct a dispatcher. LLDispatcher(); virtual ~LLDispatcher(); // Returns if they keyed handler exists in this dispatcher. bool isHandlerPresent(const key_t& name) const; // copy all known keys onto keys_t structure void copyAllHandlerNames(keys_t& names) const; // Call this method with the name of the request that has come // in. If the handler is present, it is called with the params and // returns the return value from bool dispatch( const key_t& name, const LLUUID& invoice, const sparam_t& strings) const; //const iparam_t& itegers) const; // Add a handler. If one with the same key already exists, its // pointer is returned, otherwise returns NULL. This object does // not do memory management of the LLDispatchHandler, and relies // on the caller to delete the object if necessary. LLDispatchHandler* addHandler(const key_t& name, LLDispatchHandler* func); // Helper method to unpack the dispatcher message bus // format. Returns true on success. static bool unpackMessage( LLMessageSystem* msg, key_t& method, LLUUID& invoice, sparam_t& parameters); protected: typedef std::map dispatch_map_t; dispatch_map_t mHandlers; }; #endif // LL_LLDISPATCHER_H