00001 00002 00003 00004 00005 00006 00007 00008 00009 00010 00011 00012 00013 00014 00015 00016 00017 00018 00019 00020 00021 00022 00023 00024 00025 00026 00027 00028 00029 00030 00031 00032 00033 00034 00035 00036 00037 00038 00039 00040 #include "jaus/core/events/reportevents.h" 00041 00042 using namespace JAUS; 00043 00044 00050 ReportEvents::Record::Record() : mEventType(Events::Periodic), 00051 mEventID(0), 00052 mQueryCode(0) 00053 { 00054 } 00055 00056 00062 ReportEvents::Record::Record(const ReportEvents::Record& record) 00063 { 00064 *this = record; 00065 } 00066 00067 00073 ReportEvents::Record::~Record() 00074 { 00075 } 00076 00077 00083 ReportEvents::Record& ReportEvents::Record::operator =(const ReportEvents::Record& record) 00084 { 00085 if(this != &record) 00086 { 00087 mEventType = record.mEventType; 00088 mEventID = record.mEventID; 00089 mQueryCode = record.mQueryCode; 00090 mQueryMessage = record.mQueryMessage; 00091 } 00092 return *this; 00093 } 00094 00095 00104 ReportEvents::ReportEvents(const Address& dest, 00105 const Address& src) : Message(REPORT_EVENTS, dest, src) 00106 { 00107 } 00108 00109 00115 ReportEvents::ReportEvents(const ReportEvents& message) : Message(REPORT_EVENTS) 00116 { 00117 *this = message; 00118 } 00119 00120 00121 00127 ReportEvents::~ReportEvents() 00128 { 00129 } 00130 00131 00132 00144 int ReportEvents::WriteMessageBody(Packet& packet) const 00145 { 00146 int total = 0; 00147 int expected = BYTE_SIZE; 00148 00149 total += packet.WriteByte( (const Byte)mEvents.size() ); 00150 00151 Record::List::const_iterator record; 00152 for(record = mEvents.begin(); 00153 record != mEvents.end(); 00154 record++) 00155 { 00156 expected += BYTE_SIZE*2 + UINT_SIZE + USHORT_SIZE + record->mQueryMessage.Size(); 00157 total += packet.Write((const Byte)record->mEventType); 00158 total += packet.Write((const Byte)record->mEventID); 00159 total += packet.Write((UInt)(USHORT_SIZE + record->mQueryMessage.Size())); 00160 total += packet.Write(record->mQueryCode); 00161 if(record->mQueryMessage.Size() > 0) 00162 { 00163 total += packet.Write(record->mQueryMessage); 00164 } 00165 } 00166 00167 return total == expected ? total : -1; 00168 } 00169 00170 00182 int ReportEvents::ReadMessageBody(const Packet& packet) 00183 { 00184 int total = 0; 00185 int expected = BYTE_SIZE; 00186 Byte numEvents = 0; 00187 total += packet.Read( numEvents ); 00188 00189 for(Byte r = 0; 00190 r < numEvents; 00191 r++) 00192 { 00193 expected += BYTE_SIZE*2 + UINT_SIZE + USHORT_SIZE; 00194 UInt payloadSize = 0; 00195 Record record; 00196 total += packet.Read((Byte &)record.mEventType); 00197 total += packet.Read(record.mEventID); 00198 total += packet.Read(payloadSize); 00199 if(payloadSize >= USHORT_SIZE) 00200 { 00201 expected += payloadSize - USHORT_SIZE; 00202 total += packet.Read(record.mQueryCode); 00203 total += packet.Read(record.mQueryMessage, payloadSize - USHORT_SIZE); 00204 } 00205 mEvents.push_back(record); 00206 } 00207 00208 return total == expected ? total : -1; 00209 } 00210 00211 00218 bool ReportEvents::IsLargeDataSet(const unsigned int maxPayloadSize) const 00219 { 00220 unsigned int total = BYTE_SIZE; 00221 00222 Record::List::const_iterator record; 00223 for(record = mEvents.begin(); 00224 record != mEvents.end(); 00225 record++) 00226 { 00227 total += BYTE_SIZE*2 + UINT_SIZE + USHORT_SIZE + record->mQueryMessage.Size(); 00228 } 00229 00230 return total > maxPayloadSize; 00231 } 00232 00233 00239 ReportEvents& ReportEvents::operator =(const ReportEvents &message) 00240 { 00241 if(this != &message) 00242 { 00243 CopyHeaderData(&message); 00244 mEvents = message.mEvents; 00245 } 00246 return *this; 00247 } 00248 00249 00250 /* End of File */