00001
00030 #ifndef LL_LLVIEWERCOMMUNICATION_H
00031 #define LL_LLVIEWERCOMMUNICATION_H
00032
00033 #include <map>
00034
00043 class LLViewerCircuit
00044 {
00045 public:
00046 LLViewerCircuit(U32 channel) : mChannel(channel) {};
00047 LLViewerCircuit() : mChannel(0) {}
00048
00052 U32 getChannel() const { return mChannel; }
00053
00058 void sendReply(const LLString& data);
00059 protected:
00060 U32 mChannel;
00061 };
00062
00063
00064
00065 typedef void(*viewer_extension_callback_t)(LLString& data, LLViewerCircuit& circuit, void *user_data);
00066
00067
00072 class LLViewerExtension
00073 {
00074 public:
00084 LLViewerExtension(const LLString& name = "<unknown>", const U32 version = 0, viewer_extension_callback_t callback = NULL, void *user_data = NULL, const LLString& author = "", const LLString& description = "") :
00085 mName(name), mAuthor(author), mDescription(description), mVersion(version), mCallback(callback), mUserData(user_data) {};
00086
00087 LLString asString() const { return mName; }
00088
00089 LLString getName() const { return mName; }
00090 LLString getAuthor() const { return mAuthor; }
00091 LLString getDescription() const { return mDescription; }
00092 U32 getVersion() const { return mVersion; }
00093
00099 void notify(LLString& data, LLViewerCircuit& circuit) { mCallback(data, circuit, mUserData); }
00100 protected:
00101 LLString mName;
00102 LLString mAuthor;
00103 LLString mDescription;
00104 U32 mVersion;
00105
00106 viewer_extension_callback_t mCallback;
00107 void *mUserData;
00108 };
00109
00110
00111
00117 class LLViewerCommunication
00118 {
00119 public:
00120 LLViewerCommunication();
00121
00128 bool parse(const LLString &text, const LLUUID& speaker);
00129 bool parse(char *text, const LLUUID& speaker) { LLString tmp = text; return parse(tmp, speaker); }
00130
00131 void registerExtension(LLViewerExtension ext) { mExtensions[ext.getName()] = ext; }
00132
00133
00134 protected:
00135 std::map<LLString, LLViewerExtension> mExtensions;
00136 std::map<LLUUID, LLViewerCircuit> mCircuits;
00137 };
00138
00139 extern LLViewerCommunication *gViewerCommunication;
00140
00141 #endif