Changeset 247 in flair-src for trunk/tools/FlairGCS/src/UdtSocket.cpp


Ignore:
Timestamp:
May 28, 2018, 6:23:35 PM (3 years ago)
Author:
Sanahuja Guillaume
Message:

improve gcs disconnections

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/tools/FlairGCS/src/UdtSocket.cpp

    r244 r247  
    5353  heartbeat_timer->stop();
    5454  udtstats_timer->stop();
    55   if(destroySocket) UDT::close(socket);         
     55  if(destroySocket) UDT::close(socket);
     56fprintf(stderr,"fin udt\n");
    5657}
    5758
     
    151152    int num = 1;
    152153    UDTSOCKET readfds;
     154 
    153155    int rv = UDT::epoll_wait2(eid, &readfds, &num,NULL, NULL,100);
    154  
    155156    if (rv == -1) {
    156157      if (UDT::getlasterror().getErrorCode() != 6003)
     
    158159    } else if(readfds==socket && num==1 && rv==1) {
    159160       
    160       int size=UDT::recvmsg(socket, buf, buf_size);
    161       if (size > 0) {
    162         total_received+=size;
    163        
    164         switch ((unsigned char)buf[0]) {
    165           case ZLIB_HEADER: {
    166             ssize_t out_size;
    167             uncompressBuffer(buf, size, uncompressbuf, &out_size);
    168             if((unsigned char)uncompressbuf[0]==XML_HEADER && socketType==unknown) {
    169               socketType=gui;
    170               QString remoteName=ConnectionLayout::getDocRootName(uncompressbuf, out_size);
    171               setName(remoteName);
    172               emit newConnectionLayout(remoteName);//connection is Qt::BlockingQueuedConnection
     161      int size;
     162      do {
     163        size=UDT::recvmsg(socket, buf, buf_size);
     164     
     165        //fprintf(stderr,"recu %i\n",size);
     166        if (size > 0) {
     167          total_received+=size;
     168         
     169          switch ((unsigned char)buf[0]) {
     170            case ZLIB_HEADER: {
     171              ssize_t out_size;
     172              uncompressBuffer(buf, size, uncompressbuf, &out_size);
     173              if((unsigned char)uncompressbuf[0]==XML_HEADER && socketType==unknown) {
     174                socketType=gui;
     175                QString remoteName=ConnectionLayout::getDocRootName(uncompressbuf, out_size);
     176                setName(remoteName);
     177                emit newConnectionLayout(remoteName);//connection is Qt::BlockingQueuedConnection
     178              }
     179              emit dataReady(uncompressbuf, out_size);//connection is Qt::BlockingQueuedConnection, as we have only one buffer
     180              break;
    173181            }
    174             emit dataReady(uncompressbuf, out_size);//connection is Qt::BlockingQueuedConnection, as we have only one buffer
    175             break;
     182            case START_SENDING_FILES: {
     183              if((unsigned char)uncompressbuf[0]==XML_HEADER && socketType==unknown) {
     184                socketType=log;
     185              }
     186              setName("log files");
     187              heartbeat_timer->stop();
     188              emit newFileUI(socket);
     189              deleteLater();
     190              stop=true;
     191              destroySocket=false;
     192              break;
     193            }
     194            case XML_HEADER:
     195              if(socketType==unknown) {
     196                socketType=gui;
     197                QString remoteName=ConnectionLayout::getDocRootName(buf, size );
     198                setName(remoteName);
     199                emit newConnectionLayout(remoteName);
     200              }
     201            case DATAS_BIG_ENDIAN:
     202            case DATAS_LITTLE_ENDIAN:
     203              emit dataReady(buf, size );
     204              break;
     205            case CLOSING_CONNECTION:
     206              fprintf(stderr,"%s, connection closed\n",name.toLocal8Bit().constData());
     207              emit dataReady(buf, size );
     208              stop = true;
     209              heartbeat_timer->stop();
     210              deleteLater();
     211              break;
     212            default:
     213              fprintf(stderr,"trame non supportée %x\n", buf[0]);
    176214          }
    177           case START_SENDING_FILES: {
    178             if((unsigned char)uncompressbuf[0]==XML_HEADER && socketType==unknown) {
    179               socketType=log;
    180             }
    181             setName("log files");
    182             heartbeat_timer->stop();
    183             emit newFileUI(socket);
    184             deleteLater();
    185             stop=true;
    186             destroySocket=false;
    187             break;
    188           }
    189           case XML_HEADER:
    190             if(socketType==unknown) {
    191               socketType=gui;
    192               QString remoteName=ConnectionLayout::getDocRootName(buf, size );
    193               setName(remoteName);
    194               emit newConnectionLayout(remoteName);
    195             }
    196           case DATAS_BIG_ENDIAN:
    197           case DATAS_LITTLE_ENDIAN:
    198             emit dataReady(buf, size );
    199             break;
     215        } else {
     216          //not necessary to check, watchdog (heartbeat_timer) can do it
     217          //if(UDT::getlasterror().getErrorCode()!=6002 && !stop)
     218            //fprintf(stderr,"udt socket: %s\n",UDT::getlasterror().getErrorMessage());
     219          //UDT::close(socket);//si deconnecté
     220          //free(buf);
     221          //break;
    200222        }
    201       } else {
    202         if(UDT::getlasterror().getErrorCode()!=6002)
    203           fprintf(stderr,"udt socket: %s %i\n",UDT::getlasterror().getErrorMessage(),size);
    204         //UDT::close(socket);//si deconnecté
    205         //free(buf);
    206         //break;
    207       }
     223      } while(size>0);
    208224    } else {
    209       fprintf(stderr,"udt socket: %s\n",UDT::getlasterror().getErrorMessage());
     225      //not necessary to check, watchdog (heartbeat_timer) can do it
     226      //fprintf(stderr,"udt socket: %s\n",UDT::getlasterror().getErrorMessage());
    210227    }
    211228    UDT::epoll_remove_usock(eid, socket);
    212229    UDT::epoll_release(eid);
    213230  }
     231 
    214232  free(uncompressbuf);
    215233  free(buf);
Note: See TracChangeset for help on using the changeset viewer.