Changeset 3544 in Sophya for trunk/AddOn/TAcq/sockrawstream.cc
- Timestamp:
- Oct 24, 2008, 12:31:52 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/AddOn/TAcq/sockrawstream.cc
r3542 r3544 11 11 */ 12 12 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-- */ 18 RawInOutSocketStream::RawInOutSocketStream(Socket &skt, size_t npaqbuff) 16 19 : RawInOutStream() , _skt(skt) 17 20 { 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; 25 48 _wrbuff.cpos = 0; 26 49 … … 30 53 RawInOutSocketStream::~RawInOutSocketStream() 31 54 { 32 //DBG cout << " ---- DESTRUCTEUR ---- ~RawInOutSocketStream() " << endl; 55 // cout << " ---- DESTRUCTEUR ---- ~RawInOutSocketStream() " << endl; 56 //----- ecriture/envoi du buffer si pas vide 33 57 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'; 36 59 _wrbuff.cpos = _wrbuff.sz; 37 60 SendBuffer(); 38 61 } 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 39 80 delete [] _rdbuff.buff; 40 81 delete [] _wrbuff.buff; 82 if (!oktrailer) 83 throw SocketException("RawInOutSocketStream::~RawInOutSocketStream(): EndOfStream marker not found"); 41 84 } 42 85
Note:
See TracChangeset
for help on using the changeset viewer.