00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #include "NetworkMessage.hh"
00023 #include "PrettyDebug.hh"
00024
00025 using std::vector;
00026 using std::endl;
00027 using std::cout;
00028
00029 namespace certi {
00030
00031 static PrettyDebug D("RTIG_MSG", "NetworkMessage:");
00032 static PrettyDebug G("GENDOC",__FILE__ );
00033
00034
00035 void NetworkMessage::serialize(MessageBuffer& msgBuffer) {
00036 G.Out(pdGendoc,"enter NetworkMessage::serialize");
00037
00038
00039
00040 if ((type==NOT_USED) || (type==LAST)) {
00041 throw RTIinternalError("Invalid network type (not a valid type);");
00042 }
00043 D.Out(pdDebug, "Serialize <%s>", getName().c_str());
00044
00045 msgBuffer.write_int32(type);
00046 msgBuffer.write_int32(exception);
00047 msgBuffer.write_int32(federate);
00048 msgBuffer.write_int32(federation);
00049
00050
00051
00052
00053
00054
00055 msgBuffer.write_bool(_isDated);
00056 if (_isDated) {
00057 msgBuffer.write_double(date.getTime());
00058 D.Out(pdDebug, "Sent Message date is <%f>", date.getTime());
00059 }
00060 msgBuffer.write_bool(_isLabelled);
00061 if (_isLabelled) {
00062 msgBuffer.write_string(label);
00063 }
00064 msgBuffer.write_bool(_isTagged);
00065 if (_isTagged) {
00066 msgBuffer.write_string(tag);
00067 }
00068 G.Out(pdGendoc,"exit NetworkMessage::serialize");
00069 }
00070
00071 void NetworkMessage::deserialize(MessageBuffer& msgBuffer) {
00072 G.Out(pdGendoc,"enter NetworkMessage::deserialize");
00073
00074
00075
00076 D[pdDebug] << "Deserialize <" << getName().c_str()<<">"<<endl;
00077
00078 type = static_cast<NetworkMessage::Type>(msgBuffer.read_int32());
00079 exception = static_cast<TypeException>(msgBuffer.read_int32());
00080 federate = msgBuffer.read_int32();
00081 federation = msgBuffer.read_int32();
00082
00083
00084
00085
00086
00087
00088 _isDated = msgBuffer.read_bool();
00089 if (_isDated) {
00090 date = msgBuffer.read_double();
00091 D.Out(pdDebug, "Received Message date is <%f>", date.getTime());
00092 }
00093 _isLabelled = msgBuffer.read_bool();
00094 if (_isLabelled) {
00095 label = msgBuffer.read_string();
00096 }
00097 _isTagged = msgBuffer.read_bool();
00098 if (_isTagged) {
00099 tag = msgBuffer.read_string();
00100 }
00101 G.Out(pdGendoc,"exit NetworkMessage::deserialize");
00102 }
00103
00104 void
00105 NetworkMessage::send(Socket *socket, MessageBuffer& msgBuffer) throw (NetworkError, NetworkSignal){
00106 G.Out(pdGendoc,"enter NetworkMessage::send");
00107
00108 msgBuffer.reset();
00109
00110
00111
00112
00113 serialize(msgBuffer);
00114
00115 msgBuffer.updateReservedBytes();
00116 D.Out(pdDebug,"Sending <%s> whose buffer has <%u> bytes",getName().c_str(),msgBuffer.size());
00117
00118
00119
00120 if (NULL != socket) {
00121 socket->send(static_cast<unsigned char*>(msgBuffer(0)), msgBuffer.size());
00122 } else {
00123 D.Out( pdDebug, "Not sending -- socket is deleted." );
00124 }
00125 G.Out(pdGendoc,"exit NetworkMessage::send");
00126 }
00127
00128 void
00129 NetworkMessage::receive(Socket* socket, MessageBuffer& msgBuffer) throw (NetworkError, NetworkSignal) {
00130 G.Out(pdGendoc,"enter NetworkMessage::receive");
00131
00132
00133
00134
00135 msgBuffer.reset();
00136
00137
00138 socket->receive(msgBuffer(0), msgBuffer.reservedBytes);
00139
00140
00141 msgBuffer.assumeSizeFromReservedBytes();
00142 D.Out(pdDebug,"Got a MsgBuf of size %d bytes (including %d reserved)",msgBuffer.size(),msgBuffer.reservedBytes);
00143
00144 socket->receive(msgBuffer(msgBuffer.reservedBytes),msgBuffer.size()-msgBuffer.reservedBytes);
00145
00146
00147
00148
00149 deserialize(msgBuffer);
00150 G.Out(pdGendoc,"exit NetworkMessage::receive");
00151 }
00152
00153 }
00154
00155