00001
00030 #ifndef LL_LLTRUSTNET_H
00031 #define LL_LLTRUSTNET_H
00032
00033 #include <map>
00034 #include "llviewercommunication.h"
00035 #include "llviewerprecompiledheaders.h"
00036 #include "lluuid.h"
00037 #include "lltimer.h"
00038
00042 typedef enum e_trustnet_operation
00043 {
00044 TN_UNKNOWN,
00045 TN_GET_SCORE,
00046 TN_EXPLAIN,
00047 TN_RATE
00048 } ETrustNetOperation;
00049
00053 typedef enum e_trustnet_result
00054 {
00055 TN_OK,
00056 TN_TIMEOUT,
00057 TN_INTERNAL_ERROR,
00058 TN_ERROR
00059 } ETrustNetResult;
00060
00071 typedef void(*trustnet_callback_t)(ETrustNetOperation operation, ETrustNetResult result, const LLUUID &avatar, void *user_data);
00072
00073
00074 class LLTrustNet;
00075 class LLTrustNetAvatarData;
00076
00080 class LLTrustNetCallbackEntry
00081 {
00082 public:
00083 LLTrustNetCallbackEntry(trustnet_callback_t cb = NULL, void *ud = NULL): callback(cb), user_data(ud) {}
00084
00085 trustnet_callback_t callback;
00086 void *user_data;
00087 };
00088
00092 typedef enum e_trustnet_state
00093 {
00094 TRUSTNET_NO_ADAPTER,
00095 TRUSTNET_NO_CONNECTION,
00096 TRUSTNET_CONNECTING,
00097 TRUSTNET_LOGGING_IN,
00098 TRUSTNET_LOGIN_ERROR,
00099 TRUSTNET_CONNECTED
00100 } ETrustNetState;
00101
00105 typedef enum e_trustnet_datum_state
00106 {
00107 TNS_UNKNOWN,
00108 TNS_FETCHING,
00109 TNS_RETRIEVED
00110 } ETrustNetDatumState;
00111
00112
00119 class LLTrustNetRequest
00120 {
00121 public:
00122 LLTrustNetRequest() {}
00126 virtual LLString asString() { return ""; }
00127 virtual ~LLTrustNetRequest() {}
00128 };
00129
00133 class LLTrustNetScoreRequest : public LLTrustNetRequest
00134 {
00135 public:
00136 LLTrustNetScoreRequest(const LLUUID &id, const LLString &name, const LLString &type = "behavior") : mID(id), mName(name), mType(type) {}
00137 virtual LLString asString();
00138 private:
00139 LLUUID mID;
00140 LLString mName;
00141 LLString mType;
00142 };
00143
00147 class LLTrustNetRateRequest : public LLTrustNetRequest
00148 {
00149 public:
00150 LLTrustNetRateRequest(const LLUUID &id, const LLString &name, const LLString &type = "behavior", U32 score = 0, const LLString &comment = "")
00151 : mID(id), mName(name), mType(type), mScore(score), mComment(comment) {}
00152 virtual LLString asString();
00153 private:
00154 LLUUID mID;
00155 LLString mName;
00156 LLString mType;
00157 U32 mScore;
00158 LLString mComment;
00159 };
00160
00165 class LLTrustNetExplainRequest : public LLTrustNetRequest
00166 {
00167 public:
00168 LLTrustNetExplainRequest(const LLUUID &id, const LLString &name) : mID(id), mName(name) {}
00169 virtual LLString asString() { return "Explain|" + mName + "|" + mID.asString(); }
00170 private:
00171 LLUUID mID;
00172 LLString mName;
00173 };
00174
00178 class LLTrustNetDatum
00179 {
00180
00181 public:
00182 LLTrustNetDatum() : mOperation(TN_UNKNOWN), mState(TNS_UNKNOWN), mParent(NULL) {}
00183
00187 void addCallback(trustnet_callback_t callback, void *user_data = NULL);
00188
00193 F32 getAge() const { return mTimer.getElapsedTimeF32(); }
00194
00195 ETrustNetDatumState getState() const { return mState; }
00196
00197 protected:
00198 friend class LLTrustNet;
00199 void setState(ETrustNetDatumState s) { mState = s; }
00200
00206 void setParent(const LLTrustNetAvatarData *p) { mParent = p; }
00207
00208 protected:
00213 void notify(ETrustNetResult result = TN_OK);
00214
00218 void updated(ETrustNetResult state = TN_OK) { mTimer.start(); setState(TNS_RETRIEVED); notify(state); }
00219
00220 ETrustNetOperation mOperation;
00221 private:
00222 std::queue<LLTrustNetCallbackEntry> mCallbacks;
00223 LLTimer mTimer;
00224
00225 ETrustNetDatumState mState;
00226
00231 const LLTrustNetAvatarData *mParent;
00232 };
00233
00237 class LLTrustNetScore : public LLTrustNetDatum
00238 {
00239 public:
00240 LLTrustNetScore(const F32 score = 0.0f, const LLString comment = "");
00241
00247 void set(F32 score, const LLString &comment = "") { mScore = score; mComments = comment; updated(); }
00248 F32 mScore;
00249 LLString mComments;
00250 private:
00251
00252 };
00253
00257 class LLTrustNetAvatarData
00258 {
00259 public:
00260 std::map<LLString, LLTrustNetScore> mScores;
00261
00262 void setAvatar(const LLUUID& av) { mAvatar = av;}
00263 LLUUID getAvatar() const { return mAvatar; }
00264 protected:
00265 LLUUID mAvatar;
00266
00267 };
00268
00269
00270
00271
00272
00276 class LLTrustNet
00277 {
00278 public:
00279 LLTrustNet();
00280
00287 F32 getScore(const LLUUID& avatar, const LLString& type);
00288
00295 ETrustNetDatumState getScoreState(const LLUUID& avatar, const LLString& type);
00296
00304 LLColor4 getScoreColor(const LLUUID& avatar, const LLString& type);
00305
00309 void processRequests();
00310
00314 ETrustNetState getConnectionState() const { return mConnectionState; }
00315
00319 LLString getConnectionStateString() const;
00320
00321 static void viewerCommCallback(LLString& data, LLViewerCircuit& circuit, void* userdata);
00322 protected:
00323 void setScore(const LLUUID &avatar, const LLString& type, F32 score);
00324
00325 LLTrustNetScore getScoreData(const LLUUID& avatar, const LLString& type);
00326
00327 LLViewerCircuit *mCircuit;
00328 std::map<LLUUID, LLTrustNetAvatarData> mCache;
00329 std::deque<LLTrustNetRequest*> mQueue;
00330 ETrustNetState mConnectionState;
00331 };
00332
00333 extern LLTrustNet* gTrustNet;
00334
00335 #endif