Changeset 3544 in Sophya for trunk/AddOn/TAcq/sockrawstream.cc


Ignore:
Timestamp:
Oct 24, 2008, 12:31:52 PM (17 years ago)
Author:
ansari
Message:

debug classes RawInOutSocketStream et ajout d'envoi/reception de messages de header/trailer - Reza 24/10/2008

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/AddOn/TAcq/sockrawstream.cc

    r3542 r3544  
    1111*/
    1212
    13 
    14 /* --Methode-- */
    15 RawInOutSocketStream::RawInOutSocketStream(Socket &skt, size_t rwb_size)
     13// Taille de base pour les messages echanges = Longueur header = long. Trailer
     14// Longueur de trailer pour marquer la fin
     15#define   RIOS_BBSIZE  64
     16
     17/* --Methode-- */
     18RawInOutSocketStream::RawInOutSocketStream(Socket &skt, size_t npaqbuff)
    1619  : RawInOutStream() , _skt(skt)
    1720{
    18   if (rwb_size < 1) rwb_size = 256;
    19   _rdbuff.buff = new char[rwb_size];
    20   _rdbuff.sz = rwb_size;
    21   _rdbuff.cpos = rwb_size;
    22 
    23   _wrbuff.buff = new char[rwb_size];
    24   _wrbuff.sz = rwb_size;
     21
     22// ---- preparation de la chaine d'identification / taille du buffer
     23  const char * hdrmarq = "SIPSS-RawInOutSocketStream-Header";
     24//                        0123456789012345678901234567890123456789
     25  char msg[RIOS_BBSIZE];
     26  for(size_t k=30; k<RIOS_BBSIZE; k++) msg[k]='\0';
     27  strcpy(msg, hdrmarq);
     28  if (npaqbuff < 1) npaqbuff = 1;
     29  size_t sbsz =  npaqbuff*RIOS_BBSIZE;
     30  sprintf(msg+48,"%ld",(long)sbsz);
     31// ----- Envoi du marqueur de debut et negociation de taille du buffer
     32  Send(msg, (size_t)RIOS_BBSIZE);
     33  Receive(msg, (size_t)RIOS_BBSIZE);
     34  if (strcmp(msg, hdrmarq)!=0) 
     35    throw SocketException("RawInOutSocketStream::RawInOutSocketStream()- ExchangeMsg check failed");
     36
     37  size_t rbsz = atol(msg+48);
     38  size_t bufsize = (sbsz >= rbsz) ? sbsz : rbsz;
     39
     40//DBG  cout << "RIOSS::RawInOutSocketStream()*DBG* sbsz=" << sbsz << " rbsz=" << rbsz << " -->bufsize=" << bufsize << endl;
     41 
     42  _rdbuff.buff = new char[bufsize];
     43  _rdbuff.sz = bufsize;
     44  _rdbuff.cpos = bufsize;
     45
     46  _wrbuff.buff = new char[bufsize];
     47  _wrbuff.sz = bufsize;
    2548  _wrbuff.cpos = 0;
    2649 
     
    3053RawInOutSocketStream::~RawInOutSocketStream()
    3154{
    32   //DBG  cout << " ---- DESTRUCTEUR ---- ~RawInOutSocketStream() " << endl;
     55//  cout << " ---- DESTRUCTEUR ---- ~RawInOutSocketStream() " << endl;
     56  //----- ecriture/envoi du buffer si pas vide
    3357  if (_wrbuff.cpos > 0) {
    34     for (size_t k= _wrbuff.cpos; k<_wrbuff.sz; k++)
    35       _wrbuff.buff[k] = '\0';
     58    for (size_t k= _wrbuff.cpos; k<_wrbuff.sz; k++)  _wrbuff.buff[k] = '\0';
    3659    _wrbuff.cpos = _wrbuff.sz;
    3760    SendBuffer();
    3861  }
     62  // Envoi du marquer de fin (trailer)
     63  const char * trlmarq = "TRAILER-SIPSS-RawInOutSocketStream-Trailer";
     64//                        0123456789012345678901234567890123456789
     65  char msg[RIOS_BBSIZE];
     66  for(size_t k=30; k<RIOS_BBSIZE; k++) msg[k]='\0';
     67  strcpy(msg, trlmarq);
     68  Send(msg, (size_t)RIOS_BBSIZE);
     69
     70  bool oktrailer=false;
     71  size_t nrdt = 0;
     72  size_t maxtry = 16*_rdbuff.sz / RIOS_BBSIZE;
     73  while(!oktrailer && (nrdt<maxtry)) {
     74    Receive(msg, (size_t)RIOS_BBSIZE);
     75    nrdt++;
     76    if (strcmp(msg, trlmarq)==0)  oktrailer = true;
     77  }
     78//DBG  cout << "RIOSS::~RawInOutSocketStream()*DBG* nrdt=" << nrdt << " Trailer:" << ((oktrailer)?" OK":" ERROR") << endl;
     79
    3980  delete [] _rdbuff.buff;
    4081  delete [] _wrbuff.buff;
     82  if (!oktrailer)
     83    throw SocketException("RawInOutSocketStream::~RawInOutSocketStream(): EndOfStream marker not found");
    4184}
    4285
Note: See TracChangeset for help on using the changeset viewer.