Changeset 3544 in Sophya for trunk/AddOn


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

Location:
trunk/AddOn/TAcq
Files:
3 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
  • trunk/AddOn/TAcq/sockrawstream.h

    r3542 r3544  
    1717class RawInOutSocketStream : public RawInOutStream {
    1818public:
    19                       RawInOutSocketStream(Socket& skt, size_t rwb_size=1024);
     19                      RawInOutSocketStream(Socket& skt, size_t npaq_buff=16);
    2020  virtual             ~RawInOutSocketStream();
    2121
  • trunk/AddOn/TAcq/tsok.cc

    r3542 r3544  
    1717
    1818void burawtst();
    19 void serverside();
    20 void clientside(string& servname, string& msg, string& args);
    21 
     19int serverside();
     20int clientside(string& servname, string& msg, string& args);
     21
     22static size_t RIOS_NPAQ = 16;
     23 
     24//---------------------------------------------------------------------------
     25//  main program de test des classes socket  - R. Ansari 2005-2008
     26//---------------------------------------------------------------------------
    2227int main(int narg, char *arg[])
    2328{
     
    2530  if (narg < 2) {
    2631    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"
    2833         << "    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"
    3035         << "   S : run tsok as server side \n"
    3136         << "   C : run tsok as client side \n"
     
    4348  string oargs = "1,100,50";
    4449  if (narg > 4) oargs = arg[4];
    45 
     50  if (narg > 5) RIOS_NPAQ = atol(arg[5]);
     51
     52  int rc = 0;
    4653  try {
    4754    SophyaInit(); 
    4855    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);
    5158    else burawtst();
    5259  }
    5360  catch(PThrowable exc ) {
    5461    cerr << "tsok-main() , Catched exception: \n" << exc.Msg() << endl;
     62    rc=97;
    5563  }
    5664  catch(std::exception ex) {
    5765    cerr << "tsok-main() , Catched std::exception " << (string)(ex.what()) << endl;
     66    rc=98;
    5867  }
    5968  catch(...) {
    6069    cerr << "tsok-main() , Catched ... ! " << endl;
    61   }
     70    rc=99;
     71  }
     72  cout << " --------- End of tsok.cc Rc=" << rc << " ---------------- " << endl;
    6273}
    6374
    6475
    6576/* --Fonction-- */
    66 void serverside()
    67 {
     77int serverside()
     78{
     79  int rc = 66;
    6880  cout << " ======== tsok.cc / ServerSide ============ " << endl;
    6981  cout << " Creating server socket ... , PortId= " << PORTID << endl;
     
    104116        //      sleep(1);
    105117          {
    106           RawInOutSocketStream sstr(skt);
     118          RawInOutSocketStream sstr(skt, RIOS_NPAQ);
    107119          PInPersist pis(&sstr, false, false);
    108120          pis.GetObject(mx);
     
    113125          {
    114126          // cout << " --- writing back modified mx to socket stream ... " << endl;
    115           RawInOutSocketStream sstr(skt);
     127          RawInOutSocketStream sstr(skt, RIOS_NPAQ);
    116128          POutPersist pos(&sstr, false);
    117129          pos.PutObject(mx);
     
    132144    cout << "ServerSide: Closing current socket ..." << endl;
    133145    skt.Close();
     146    rc = 0;
    134147  }  // fin while(!fgstop)
    135148  cout << " ======= End of tsok.cc / ServerSide ======== " << endl;
     149  return rc;
    136150}
    137151
    138152/* --Fonction-- */
    139 void clientside(string& servname, string& msg, string& args)
    140 {
     153int clientside(string& servname, string& msg, string& args)
     154{
     155  int rc = 77;
    141156  cout << " ======== tsok.cc / ClientSide ============ " << endl;
    142157  cout << "  ServerName= " << servname << " OpeMsg= " << msg << endl;
     
    150165  cout << "  Sending Message : " << buff << endl;
    151166  cli.Send(buff, 256);
     167  rc = 0;
    152168  if (msg == "PPFSOCKET") {
     169    rc = 7;
    153170    int nloop = 1;
    154171    int sx = 100;
     
    170187      {
    171188      // cout << " --- writing mx to socket stream ... " << endl;
    172       RawInOutSocketStream sstr(cli);
     189      RawInOutSocketStream sstr(cli, RIOS_NPAQ);
    173190      POutPersist pos(&sstr, false);
    174191      pos.PutObject(mx);
     
    176193      TMatrix<int_4> mxr;
    177194      {
    178       RawInOutSocketStream sstr(cli);
     195      RawInOutSocketStream sstr(cli, RIOS_NPAQ);
    179196      PInPersist pis(&sstr, false, false);
    180197      pis.GetObject(mxr);
     
    197214    }
    198215    cout << "ClientSide/End of PPFSocket  NPb-Check-returnMatrix=" << npb << " /NLoop=" << nloop << endl; 
     216    if (npb==0) rc=0;
     217    else rc=70;
    199218    float ttms  = tm.TotalElapsedTime();
    200219    if (ttms < 1.e-6) ttms = 1e-6;
     
    205224  cli.Send(buff, 256);
    206225  cout << " ======= End of tsok.cc / ClientSide ======== " << endl;
     226  return rc;
    207227}
    208228
Note: See TracChangeset for help on using the changeset viewer.