00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #if !defined(_MESSAGE_)
00024 #define _MESSAGE_
00025
00026 #include "Object.h"
00027 #include <stdlib.h>
00028 #include <stdio.h>
00029 #include <time.h>
00030 #include "JString.h"
00031 #include "Collections.h"
00032 #include "JTime.h"
00033 #include "DotString.h"
00034 #include "XMLParser.h"
00035
00036 namespace cmlabs {
00037
00038 class Message;
00039 class Reference : public Object {
00040 public:
00041
00042 Reference();
00043
00044 Reference(XMLNode* node);
00045
00046 Reference(Message* msg);
00047
00048 Object* clone() const;
00049 bool fromXML(XMLNode* node);
00050 JString toXML();
00051 JString toHTML(const JString& urlformat);
00052 JString toHTML();
00053
00054 JString id;
00055 JString stored;
00056 JString from;
00057 JString to;
00058 JString cc;
00059 JString type;
00060 JTime postedTime;
00061 JTime receivedTime;
00062 };
00063
00064 class Message : public Object {
00065 public:
00066
00067 Message();
00068
00069 Message(const JString& xml);
00070
00071 Message(XMLNode* node);
00072
00073 Message(const Message &msg);
00074
00075 Message(
00076 const JString& from,
00077 const JString& to,
00078 const JString& type
00079 );
00080
00081 Message(
00082 const JString& from,
00083 const JString& to,
00084 const JString& type,
00085 const JString& content,
00086 const JString& language
00087 );
00088
00089 Message(
00090 const JString& from,
00091 const JString& to,
00092 const JString& type,
00093 Object* obj
00094 );
00095 ~Message();
00096
00097 bool init();
00098 bool unitTest();
00099 Object* clone() const;
00100 Message* shallowClone() const;
00101 Message* tinyClone() const;
00102
00103 Message& operator=(const Message &msg);
00104 bool equals(const Object* o2) const;
00105 int compare(const Object* o2) const;
00106
00107
00108
00109
00110
00111
00112
00113 bool fromXML(XMLNode* xmlNode);
00114
00115 bool fromXML(const JString& xml);
00116
00117 JString toXML();
00118
00119
00120 JString toHTMLTable(const JString& tags = "");
00121
00122
00123 JString getHistoryHTML(const JString& urlformat);
00124
00125
00126 JString print();
00127
00128 JString printShort();
00129
00130
00131 virtual unsigned long getPayloadSize() const;
00132
00133
00134
00135
00136
00137
00138 long getBinarySize(int chunk);
00139
00140 int getBinaryChunkCount();
00141
00142 long toBinaryBuffer(int chunk, char* buffer, int maxlen);
00143
00144 bool fromBinaryBuffer(int chunk, char* buffer, long len);
00145
00146
00147
00148
00149
00150
00151 bool set(const JString& name, const JString& value);
00152
00153 JString get(const JString& name);
00154
00155
00156 bool setAux(const JString& name, const JString& value);
00157
00158 JString getAux(const JString& name);
00159
00160
00161 bool setTime(const JString& name, const JTime& t);
00162
00163 JTime getTime(const JString& name);
00164
00165
00166 bool addReferenceToHistory(Message* msg, const JString& author);
00167
00168 bool addReferenceToHistory(Reference* ref, const JString& author);
00169
00170 ObjectDictionary* getAllHistory();
00171
00172 ObjectCollection* getHistoryFromAuthor(const JString& author);
00173
00174 bool deleteHistory();
00175
00176
00177
00178
00179
00180
00181
00182 bool setObject(Object* obj);
00183
00184 Object* getObject();
00185
00186 JString getObjectType();
00187
00188 bool deleteObject();
00189
00190 Object* takeObject();
00191
00192
00193 bool doesTypeMatch(const JString& match);
00194
00195
00196
00197
00198 JString getID();
00199
00200 Reference* getInReplyTo();
00201
00202 JString getFrom();
00203
00204 JString getTo();
00205
00206 JString getCC();
00207
00208 JString getType();
00209
00210 JString getContent();
00211
00212 JString getOrigin();
00213
00214 JString getComment();
00215
00216 double getPriority();
00217
00218 double getTimeToLive();
00219
00220 JString getLanguage();
00221
00222 JString getStored();
00223
00224
00225 JTime getTimestamp();
00226
00227 JTime getPostedTime();
00228
00229 JTime getReceivedTime();
00230
00231
00232
00233
00234 bool setID(const JString& id);
00235
00236 bool setInReplyTo(Message* msg);
00237 bool setInReplyTo(Reference* ref);
00238
00239 bool setFrom(const JString& frm);
00240
00241 bool setTo(const JString& t);
00242
00243 bool setCC(const JString& cc);
00244
00245 bool setType(const JString& t);
00246
00247 bool setContent(const JString& cont, const JString& language);
00248
00249 bool setContentNoParse(const JString& cont, const JString& language);
00250
00251 bool setOrigin(const JString& orig);
00252
00253 bool setComment(const JString& str);
00254
00255 bool setPriority(double val);
00256
00257 bool setTimeToLive(double val);
00258
00259 bool setLanguage(const JString& language);
00260
00261 bool setStored(const JString& stored);
00262
00263
00264 bool setTimestamp(const JTime& t);
00265
00266 bool setPostedTime(const JTime& t);
00267
00268 bool setReceivedTime(const JTime& t);
00269
00270
00271
00272
00273 Dictionary* auxDict;
00274
00275 ObjectDictionary* timeDict;
00276
00277 ObjectDictionary* history;
00278
00279 Object* object;
00280
00281
00282 Collection* htmlCol;
00283
00284
00285 JString from;
00286 JString to;
00287 JString type;
00288 JString id;
00289 JString cc;
00290 JString origin;
00291 JString comment;
00292 double priority;
00293 double timeToLive;
00294 JString stored;
00295 Reference* inReplyTo;
00296 JString isResponse;
00297 JString noreply;
00298
00299 JTime postedTime;
00300 JTime receivedTime;
00301
00302
00303 JString language;
00304 JString content;
00305
00306 ObjectCollection* attachedMsgs;
00307
00308 };
00309
00310
00311 }
00312
00313 #include "TCPLocation.h"
00314
00315 namespace cmlabs {
00316
00317 class MessageSender {
00318 public:
00319
00320 virtual Message* sendReceiveMsgTo(const JString& name, Message* msg, int timeout = MSGTIMEOUT) = 0;
00321
00322 virtual bool sendMsgTo(const JString& name, Message* msg, int timeout = MSGTIMEOUT) = 0;
00323
00324
00325
00326
00327
00328
00329
00330 virtual bool log(int level, char *format, ...) = 0;
00331 virtual bool setStatus(const JString& name, const JString& value) = 0;
00332 virtual JString getStatus(const JString& name) = 0;
00333 virtual TCPLocation resolve(const JString& name, bool forceCNSLookup = false) = 0;
00334 };
00335
00336 }
00337
00338 #endif
00339