00001
00032 #ifndef LL_LLDISPATCHER_H
00033 #define LL_LLDISPATCHER_H
00034
00035 #include <map>
00036 #include <vector>
00037 #include <string>
00038
00039 class LLDispatcher;
00040 class LLMessageSystem;
00041 class LLUUID;
00042
00043
00044
00045
00046
00047
00048
00049
00050
00051 class LLDispatchHandler
00052 {
00053 public:
00054 typedef std::vector<std::string> sparam_t;
00055
00056 LLDispatchHandler() {}
00057 virtual ~LLDispatchHandler() {}
00058 virtual bool operator()(
00059 const LLDispatcher* dispatcher,
00060 const std::string& key,
00061 const LLUUID& invoice,
00062 const sparam_t& string) = 0;
00063
00064 };
00065
00066
00067
00068
00069
00070
00071
00072 class LLDispatcher
00073 {
00074 public:
00075 typedef std::string key_t;
00076 typedef std::vector<std::string> keys_t;
00077 typedef std::vector<std::string> sparam_t;
00078
00079
00080
00081 LLDispatcher();
00082 virtual ~LLDispatcher();
00083
00084
00085 bool isHandlerPresent(const key_t& name) const;
00086
00087
00088 void copyAllHandlerNames(keys_t& names) const;
00089
00090
00091
00092
00093 bool dispatch(
00094 const key_t& name,
00095 const LLUUID& invoice,
00096 const sparam_t& strings) const;
00097
00098
00099
00100
00101
00102
00103 LLDispatchHandler* addHandler(const key_t& name, LLDispatchHandler* func);
00104
00105
00106
00107 static bool unpackMessage(
00108 LLMessageSystem* msg,
00109 key_t& method,
00110 LLUUID& invoice,
00111 sparam_t& parameters);
00112
00113 protected:
00114 typedef std::map<key_t, LLDispatchHandler*> dispatch_map_t;
00115 dispatch_map_t mHandlers;
00116 };
00117
00118 #endif // LL_LLDISPATCHER_H