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/event.h" 00041 00042 using namespace JAUS; 00043 00044 00053 Event::Event(const Address& dest, const Address& src) : Message(EVENT, dest, src) 00054 { 00055 mEventID = mSequenceNumber = 0; 00056 mReportCode = 0; 00057 } 00058 00059 00065 Event::Event(const Event& message) : Message(EVENT) 00066 { 00067 mEventID = mSequenceNumber = 0; 00068 mReportCode = 0; 00069 *this = message; 00070 } 00071 00072 00078 Event::~Event() 00079 { 00080 } 00081 00082 00093 bool Event::SetReportMessage(const Message* reportMessage) 00094 { 00095 if(reportMessage && reportMessage->WriteMessageBody(mReportMessage) >= 0) 00096 { 00097 mReportCode = reportMessage->GetMessageCode(); 00098 return true; 00099 } 00100 return false; 00101 } 00102 00103 00114 bool Event::SetReportMessage(const UShort messageCode, const Packet& reportPayload) 00115 { 00116 mReportCode = messageCode; 00117 mReportMessage = reportPayload; 00118 return true; 00119 } 00120 00121 00133 int Event::WriteMessageBody(Packet& packet) const 00134 { 00135 int expected = (int)(BYTE_SIZE*2 + USHORT_SIZE + UINT_SIZE + mReportMessage.Size()); 00136 int written = 0; 00137 00138 written += packet.Write(mEventID); 00139 written += packet.Write(mSequenceNumber); 00140 written += packet.Write((UInt)(mReportMessage.Size() + USHORT_SIZE)); 00141 written += packet.Write(mReportCode); 00142 if(mReportMessage.Size() > 0) 00143 { 00144 written += packet.Write(mReportMessage); 00145 } 00146 00147 return written == expected ? written : -1; 00148 } 00149 00150 00162 int Event::ReadMessageBody(const Packet& packet) 00163 { 00164 int expected = (int)(BYTE_SIZE*2 + USHORT_SIZE + UINT_SIZE); 00165 int read = 0; 00166 UInt payloadSize = 0; 00167 00168 read += packet.Read(mEventID); 00169 read += packet.Read(mSequenceNumber); 00170 read += packet.Read(payloadSize); 00171 00172 if(payloadSize >= USHORT_SIZE) 00173 { 00174 expected += payloadSize - USHORT_SIZE; 00175 read += packet.Read(mReportCode); 00176 read += packet.Read(mReportMessage, payloadSize - USHORT_SIZE); 00177 } 00178 00179 return read == expected ? read : -1; 00180 } 00181 00182 00188 void Event::ClearMessageBody() 00189 { 00190 mEventID = mSequenceNumber = 0; 00191 mReportCode = 0; 00192 mReportMessage.Clear(); 00193 } 00194 00195 00202 bool Event::IsLargeDataSet(const unsigned int maxPayloadSize) const 00203 { 00204 unsigned int size = BYTE_SIZE*2 + USHORT_SIZE + UINT_SIZE + mReportMessage.Size(); 00205 return size > maxPayloadSize; 00206 } 00207 00208 00214 Event& Event::operator =(const Event& message) 00215 { 00216 if(this != &message) 00217 { 00218 CopyHeaderData(&message); 00219 mEventID = message.mEventID; 00220 mReportCode = message.mReportCode; 00221 mSequenceNumber = message.mSequenceNumber; 00222 mReportMessage = message.mReportMessage; 00223 } 00224 return *this; 00225 } 00226 00227 /* End of File */