Changeset 3544 in Sophya for trunk/AddOn
- Timestamp:
- Oct 24, 2008, 12:31:52 PM (17 years ago)
- Location:
- trunk/AddOn/TAcq
- Files:
-
- 3 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 -
trunk/AddOn/TAcq/sockrawstream.h
r3542 r3544 17 17 class RawInOutSocketStream : public RawInOutStream { 18 18 public: 19 RawInOutSocketStream(Socket& skt, size_t rwb_size=1024);19 RawInOutSocketStream(Socket& skt, size_t npaq_buff=16); 20 20 virtual ~RawInOutSocketStream(); 21 21 -
trunk/AddOn/TAcq/tsok.cc
r3542 r3544 17 17 18 18 void burawtst(); 19 void serverside(); 20 void clientside(string& servname, string& msg, string& args); 21 19 int serverside(); 20 int clientside(string& servname, string& msg, string& args); 21 22 static size_t RIOS_NPAQ = 16; 23 24 //--------------------------------------------------------------------------- 25 // main program de test des classes socket - R. Ansari 2005-2008 26 //--------------------------------------------------------------------------- 22 27 int main(int narg, char *arg[]) 23 28 { … … 25 30 if (narg < 2) { 26 31 cout << " Erreur Argument / tsok.cc : Socket class tests \n" 27 << " Usage : tsok S/C [servername=localhost] [OPEMsg=Hello] [NLoop,SizeX,SizeY] \n"32 << " Usage : tsok S/C [servername=localhost] [OPEMsg=Hello] [NLoop,SizeX,SizeY] [RIOS_NPaq=16]\n" 28 33 << " Ex: tsok S or tsok C serverName or \n" 29 << " tsok C serverName PPFSOCKET 5 1000,1000 \n"34 << " tsok C serverName PPFSOCKET 5,1000,800 \n" 30 35 << " S : run tsok as server side \n" 31 36 << " C : run tsok as client side \n" … … 43 48 string oargs = "1,100,50"; 44 49 if (narg > 4) oargs = arg[4]; 45 50 if (narg > 5) RIOS_NPAQ = atol(arg[5]); 51 52 int rc = 0; 46 53 try { 47 54 SophyaInit(); 48 55 InitTim(); 49 if (fgserv) serverside();50 else if (*arg[1] == 'C') clientside(servname, opemsg, oargs);56 if (fgserv) rc=serverside(); 57 else if (*arg[1] == 'C') rc=clientside(servname, opemsg, oargs); 51 58 else burawtst(); 52 59 } 53 60 catch(PThrowable exc ) { 54 61 cerr << "tsok-main() , Catched exception: \n" << exc.Msg() << endl; 62 rc=97; 55 63 } 56 64 catch(std::exception ex) { 57 65 cerr << "tsok-main() , Catched std::exception " << (string)(ex.what()) << endl; 66 rc=98; 58 67 } 59 68 catch(...) { 60 69 cerr << "tsok-main() , Catched ... ! " << endl; 61 } 70 rc=99; 71 } 72 cout << " --------- End of tsok.cc Rc=" << rc << " ---------------- " << endl; 62 73 } 63 74 64 75 65 76 /* --Fonction-- */ 66 void serverside() 67 { 77 int serverside() 78 { 79 int rc = 66; 68 80 cout << " ======== tsok.cc / ServerSide ============ " << endl; 69 81 cout << " Creating server socket ... , PortId= " << PORTID << endl; … … 104 116 // sleep(1); 105 117 { 106 RawInOutSocketStream sstr(skt );118 RawInOutSocketStream sstr(skt, RIOS_NPAQ); 107 119 PInPersist pis(&sstr, false, false); 108 120 pis.GetObject(mx); … … 113 125 { 114 126 // cout << " --- writing back modified mx to socket stream ... " << endl; 115 RawInOutSocketStream sstr(skt );127 RawInOutSocketStream sstr(skt, RIOS_NPAQ); 116 128 POutPersist pos(&sstr, false); 117 129 pos.PutObject(mx); … … 132 144 cout << "ServerSide: Closing current socket ..." << endl; 133 145 skt.Close(); 146 rc = 0; 134 147 } // fin while(!fgstop) 135 148 cout << " ======= End of tsok.cc / ServerSide ======== " << endl; 149 return rc; 136 150 } 137 151 138 152 /* --Fonction-- */ 139 void clientside(string& servname, string& msg, string& args) 140 { 153 int clientside(string& servname, string& msg, string& args) 154 { 155 int rc = 77; 141 156 cout << " ======== tsok.cc / ClientSide ============ " << endl; 142 157 cout << " ServerName= " << servname << " OpeMsg= " << msg << endl; … … 150 165 cout << " Sending Message : " << buff << endl; 151 166 cli.Send(buff, 256); 167 rc = 0; 152 168 if (msg == "PPFSOCKET") { 169 rc = 7; 153 170 int nloop = 1; 154 171 int sx = 100; … … 170 187 { 171 188 // cout << " --- writing mx to socket stream ... " << endl; 172 RawInOutSocketStream sstr(cli );189 RawInOutSocketStream sstr(cli, RIOS_NPAQ); 173 190 POutPersist pos(&sstr, false); 174 191 pos.PutObject(mx); … … 176 193 TMatrix<int_4> mxr; 177 194 { 178 RawInOutSocketStream sstr(cli );195 RawInOutSocketStream sstr(cli, RIOS_NPAQ); 179 196 PInPersist pis(&sstr, false, false); 180 197 pis.GetObject(mxr); … … 197 214 } 198 215 cout << "ClientSide/End of PPFSocket NPb-Check-returnMatrix=" << npb << " /NLoop=" << nloop << endl; 216 if (npb==0) rc=0; 217 else rc=70; 199 218 float ttms = tm.TotalElapsedTime(); 200 219 if (ttms < 1.e-6) ttms = 1e-6; … … 205 224 cli.Send(buff, 256); 206 225 cout << " ======= End of tsok.cc / ClientSide ======== " << endl; 226 return rc; 207 227 } 208 228
Note:
See TracChangeset
for help on using the changeset viewer.