00001 #include "OMKPvmIncomingMessage.h" 00002 00003 #include <cassert> 00004 #include <pvm3.h> 00005 00006 #include "OMKController.h" 00007 #include "OMKPvmException.h" 00008 #include "OMKBasicTypes.h" 00009 00010 using namespace std ; 00011 using namespace OMK ; 00012 00013 int PvmIncomingMessage::pvmActiveBuffer = 0 ; 00014 00015 PvmIncomingMessage::PvmIncomingMessage() : 00016 IncomingSynchronisationMessage (), 00017 PvmMessage (0) 00018 { 00019 00020 } 00021 00022 00023 00024 PvmIncomingMessage::PvmIncomingMessage(int bufId) : 00025 IncomingSynchronisationMessage (), 00026 PvmMessage (bufId) 00027 { 00028 pvmActiveBuffer = bufId ; 00029 } 00030 00031 00032 00033 void PvmIncomingMessage::initialise ( int bufId ) 00034 { 00035 _currentBuffer = bufId ; 00036 pvmActiveBuffer = bufId ; 00037 if (_myis != 0 ) 00038 { 00039 delete _myis ; 00040 _myis = 0 ; 00041 } 00042 if (_currentBuffer != 0) _messageTimestamp.unpack(*this) ; 00043 } 00044 00045 void PvmIncomingMessage::deleteCurrentBuffer() 00046 { 00047 pvm_freebuf(_currentBuffer); 00048 } 00049 00050 00051 //-------------------------------------------------------------------- 00052 PvmIncomingMessage::~PvmIncomingMessage () 00053 { 00054 00055 } 00056 00057 const Date & PvmIncomingMessage::getMessageDate() 00058 { 00059 return _messageTimestamp ; 00060 } 00061 00062 bool PvmIncomingMessage::hasMessage () const 00063 { 00064 return _currentBuffer != 0 ; 00065 } 00066 00067 00068 //-------------------------------------------------------------------- 00069 void PvmIncomingMessage::checkForGetErrors( int info) 00070 { 00071 if (info < 0 ) 00072 { 00073 cerr<<"PvmIncomingMessage::checkForGetErrors ERROR "; 00074 assert ( false ) ; 00075 switch ( info ) 00076 { 00077 case PvmNoData: 00078 cerr<<"Reading beyond the end of the receive buffer. Most likely cause is trying to get more items than were originally packed into the buffer. This can also happen if a new reception without buffer saving happened in the course of geting all the data of a previous message"; 00079 break; 00080 case PvmNoBuf: 00081 cerr<<"There is no active receive buffer to get."; 00082 break; 00083 case PvmBadMsg: 00084 cerr<<"The received message can to be decoded. Most likely because the hosts are heterogeneous and the users specified an incompatible encoding."; 00085 break; 00086 default: 00087 cerr<<"unexpected error: "; 00088 } 00089 cerr<<endl; 00090 OMASSERT( false ) ; 00091 } 00092 } 00093 00094 00095 00096 void PvmIncomingMessage::get (bool & val) 00097 { 00098 assert ( pvmActiveBuffer == _currentBuffer ) ; 00099 char realVal ; 00100 int info = pvm_upkbyte ( &realVal, 1, 1 ) ; 00101 val = realVal ; 00102 #ifdef _DEBUGPVMMESS 00103 cerr<<"PvmIncomingMessage::get (char & "<<val<<" )"<< " Buffer " << _currentBuffer << endl; 00104 #endif 00105 checkForGetErrors ( info ) ; 00106 } 00107 00108 00109 void PvmIncomingMessage::get (char & val) 00110 { 00111 assert ( pvmActiveBuffer == _currentBuffer ) ; 00112 int info = pvm_upkbyte ( &val, 1, 1 ) ; 00113 #ifdef _DEBUGPVMMESS 00114 cerr<<"PvmIncomingMessage::get (char & "<<val<<" )"<< " Buffer " << _currentBuffer << endl; 00115 #endif 00116 checkForGetErrors ( info ) ; 00117 } 00118 00119 00120 void PvmIncomingMessage::get (long & val) 00121 { 00122 assert ( pvmActiveBuffer == _currentBuffer ) ; 00123 int info = pvm_upklong ( &val, 1, 1 ) ; 00124 #ifdef _DEBUGPVMMESS 00125 cerr<<"PvmIncomingMessage::get (long & "<<val<<" )"<< " Buffer " << _currentBuffer << endl; 00126 #endif 00127 checkForGetErrors ( info ) ; 00128 } 00129 00130 00131 00132 00133 void PvmIncomingMessage::get (unsigned long & val) 00134 { 00135 assert ( pvmActiveBuffer == _currentBuffer ); 00136 int info = pvm_upkulong ( &val, 1, 1 ) ; 00137 #ifdef _DEBUGPVMMESS 00138 cerr<<"PvmIncomingMessage::get (unsigned long & "<<val<<" )"<< " Buffer " << _currentBuffer << endl; 00139 #endif 00140 checkForGetErrors ( info ) ; 00141 } 00142 00143 00144 00145 00146 00147 void PvmIncomingMessage::get (int & val) 00148 { 00149 assert ( pvmActiveBuffer == _currentBuffer ); 00150 int info = pvm_upkint ( &val, 1, 1 ) ; 00151 #ifdef _DEBUGPVMMESS 00152 cerr<<"PvmIncomingMessage::get (int & "<<val<<" )"<< " Buffer " << _currentBuffer << endl; 00153 #endif 00154 checkForGetErrors ( info ) ; 00155 } 00156 00157 00158 00159 void PvmIncomingMessage::get (unsigned int & val) 00160 { 00161 assert ( pvmActiveBuffer == _currentBuffer ); 00162 int info = pvm_upkuint ( &val, 1, 1 ) ; 00163 #ifdef _DEBUGPVMMESS 00164 cerr<<"PvmIncomingMessage::get (unsigned int & "<<val<<" )"<< " Buffer " << _currentBuffer << endl; 00165 #endif 00166 checkForGetErrors ( info ) ; 00167 } 00168 00169 00170 00171 00172 void PvmIncomingMessage::get (float & val) 00173 { 00174 assert ( pvmActiveBuffer == _currentBuffer ); 00175 int info = pvm_upkfloat ( &val, 1, 1 ) ; 00176 #ifdef _DEBUGPVMMESS 00177 cerr<<"PvmIncomingMessage::get (float & "<<val<<" )"<< " Buffer " << _currentBuffer << endl; 00178 #endif 00179 checkForGetErrors ( info ) ; 00180 } 00181 00182 00183 00184 00185 void PvmIncomingMessage::get (double & val) 00186 { 00187 assert ( pvmActiveBuffer == _currentBuffer ); 00188 int info = pvm_upkdouble ( &val, 1, 1 ) ; 00189 #ifdef _DEBUGPVMMESS 00190 cerr<<"PvmIncomingMessage::get (double & "<<val<<" )"<< " Buffer " << _currentBuffer << endl; 00191 #endif 00192 checkForGetErrors ( info ) ; 00193 } 00194 00195 00196 00197 00198 void PvmIncomingMessage::get (short & val) 00199 { 00200 assert ( pvmActiveBuffer == _currentBuffer ); 00201 int info = pvm_upkshort ( &val, 1, 1 ) ; 00202 #ifdef _DEBUGPVMMESS 00203 cerr<<"PvmIncomingMessage::get (short & "<<val<<" )"<< " Buffer " << _currentBuffer << endl; 00204 #endif 00205 checkForGetErrors ( info ) ; 00206 } 00207 00208 00209 00210 void PvmIncomingMessage::get (unsigned short & val) 00211 { 00212 assert ( pvmActiveBuffer == _currentBuffer ); 00213 int info = pvm_upkushort ( &val, 1, 1 ) ; 00214 #ifdef _DEBUGPVMMESS 00215 cerr<<"PvmIncomingMessage::get (unsigned short & "<<val<<" )"<< " Buffer " << _currentBuffer << endl; 00216 #endif 00217 checkForGetErrors ( info ) ; 00218 } 00219 00220 00221 00222 void PvmIncomingMessage::get (char * ch) 00223 { 00224 assert ( pvmActiveBuffer == _currentBuffer ); 00225 int info = pvm_upkstr ( ch ) ; 00226 #ifdef _DEBUGPVMMESS 00227 cerr<<"PvmIncomingMessage::get (char * "<<ch<<" )"<< " Buffer " << _currentBuffer << endl; 00228 #endif 00229 checkForGetErrors ( info ) ; 00230 } 00231 00232 00233 void PvmIncomingMessage::get (std::string & str) 00234 { 00235 assert ( pvmActiveBuffer == _currentBuffer ); 00236 00237 unsigned int stringSize ; 00238 int info = pvm_upkuint ( &stringSize, 1, 1 ) ; 00239 checkForGetErrors ( info ) ; 00240 00241 char * Cstr = new char [stringSize] ; 00242 00243 info = pvm_upkstr ( Cstr ) ; 00244 checkForGetErrors ( info ) ; 00245 assert (Cstr[stringSize-1] == '\0' ) ; 00246 00247 str = Cstr ; 00248 #ifdef _DEBUGPVMMESS 00249 cerr<<"PvmIncomingMessage::get (std::string & "<<str<<" )"<< " Buffer " << _currentBuffer << endl; 00250 #endif 00251 delete [] Cstr ; 00252 00253 } 00254 void PvmIncomingMessage::get (char * val, int cnt) 00255 { 00256 assert ( pvmActiveBuffer == _currentBuffer ) ; 00257 int info = pvm_upkbyte ( val, cnt, 1 ) ; 00258 #ifdef _DEBUGPVMMESS 00259 cerr<<"PvmIncomingMessage::get (char * "<<val<<" )"<< " Buffer " << _currentBuffer << endl; 00260 #endif 00261 checkForGetErrors ( info ) ; 00262 } 00263 00264 00265 void PvmIncomingMessage::get (long * val, int cnt) 00266 { 00267 assert ( pvmActiveBuffer == _currentBuffer ) ; 00268 int info = pvm_upklong ( val, cnt, 1 ) ; 00269 #ifdef _DEBUGPVMMESS 00270 cerr<<"PvmIncomingMessage::get (long * "<<val<<" )"<< " Buffer " << _currentBuffer << endl; 00271 #endif 00272 checkForGetErrors ( info ) ; 00273 } 00274 00275 00276 00277 00278 void PvmIncomingMessage::get (unsigned long * val, int cnt) 00279 { 00280 assert ( pvmActiveBuffer == _currentBuffer ); 00281 int info = pvm_upkulong ( val, cnt, 1 ) ; 00282 #ifdef _DEBUGPVMMESS 00283 cerr<<"PvmIncomingMessage::get (unsigned long * "<<val<<" )"<< " Buffer " << _currentBuffer << endl; 00284 #endif 00285 checkForGetErrors ( info ) ; 00286 } 00287 00288 00289 00290 00291 00292 void PvmIncomingMessage::get (int * val, int cnt) 00293 { 00294 assert ( pvmActiveBuffer == _currentBuffer ); 00295 int info = pvm_upkint ( val, cnt, 1 ) ; 00296 #ifdef _DEBUGPVMMESS 00297 cerr<<"PvmIncomingMessage::get (int * "<<val<<" )"<< " Buffer " << _currentBuffer << endl; 00298 #endif 00299 checkForGetErrors ( info ) ; 00300 } 00301 00302 00303 00304 void PvmIncomingMessage::get (unsigned int * val, int cnt) 00305 { 00306 assert ( pvmActiveBuffer == _currentBuffer ); 00307 int info = pvm_upkuint ( val, cnt, 1 ) ; 00308 #ifdef _DEBUGPVMMESS 00309 cerr<<"PvmIncomingMessage::get (unsigned int * "<<val<<" )"<< " Buffer " << _currentBuffer << endl; 00310 #endif 00311 checkForGetErrors ( info ) ; 00312 } 00313 00314 00315 00316 00317 void PvmIncomingMessage::get (float * val, int cnt) 00318 { 00319 assert ( pvmActiveBuffer == _currentBuffer ); 00320 int info = pvm_upkfloat ( val, cnt, 1 ) ; 00321 #ifdef _DEBUGPVMMESS 00322 cerr<<"PvmIncomingMessage::get (float * "<<val<<" )"<< " Buffer " << _currentBuffer << endl; 00323 #endif 00324 checkForGetErrors ( info ) ; 00325 } 00326 00327 00328 00329 00330 void PvmIncomingMessage::get (double * val, int cnt) 00331 { 00332 assert ( pvmActiveBuffer == _currentBuffer ); 00333 int info = pvm_upkdouble ( val, 1, 1 ) ; 00334 #ifdef _DEBUGPVMMESS 00335 cerr<<"PvmIncomingMessage::get (double * "<<val<<" )"<< " Buffer " << _currentBuffer << endl; 00336 #endif 00337 checkForGetErrors ( info ) ; 00338 } 00339 00340 00341 00342 00343 void PvmIncomingMessage::get (short * val, int cnt) 00344 { 00345 assert ( pvmActiveBuffer == _currentBuffer ); 00346 int info = pvm_upkshort ( val, cnt, 1 ) ; 00347 #ifdef _DEBUGPVMMESS 00348 cerr<<"PvmIncomingMessage::get (short * "<<val<<" )"<< " Buffer " << _currentBuffer << endl; 00349 #endif 00350 checkForGetErrors ( info ) ; 00351 } 00352 00353 00354 00355 void PvmIncomingMessage::get (unsigned short * val, int cnt) 00356 { 00357 assert ( pvmActiveBuffer == _currentBuffer ); 00358 int info = pvm_upkushort ( val, cnt, 1 ) ; 00359 #ifdef _DEBUGPVMMESS 00360 cerr<<"PvmIncomingMessage::get (unsigned short * "<<val<<" )"<< " Buffer " << _currentBuffer << endl; 00361 #endif 00362 checkForGetErrors ( info ) ; 00363 } 00364 00365
Documentation generated on Mon Jun 9 11:45:57 2008 |
Generated with doxygen by Dimitri van Heesch , 1997-2007 |