Ignore:
Timestamp:
Apr 10, 2018, 5:05:27 PM (4 years ago)
Author:
Sanahuja Guillaume
Message:

create file oscket only when necessary

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/lib/FlairCore/src/FrameworkManager_impl.cpp

    r214 r234  
    193193      Printf("Error udt::close %s", UDT::getlasterror().getErrorMessage());
    194194
    195     status = UDT::close(file_sock);
    196     if (status != 0)
    197       Printf("Error udt::close %s", UDT::getlasterror().getErrorMessage());
    198 
    199195    SleepMS(200); // a revoir, sinon UDT::cleanup bloque en RT
    200196    UDT::cleanup();
     
    210206    return;
    211207  }
     208  this->address=address;
     209  this->port=port;
    212210                                                                                                                                                                                       
    213211        UDT::startup(1024*256,1024*256,1024*256);
     
    216214  // socket file_socket, doit être créé en premier, cf station sol
    217215  Printf("Connecting to %s:%i\n", address.c_str(), port);
    218   file_sock = GetSocket(address, port);
    219   com_sock = GetSocket(address, port);
     216  //file_sock = GetSocket(address, port);
     217  com_sock = GetSocket();
    220218
    221219  // receive buffer allocation
     
    226224
    227225  com = new ui_com(this, com_sock);
    228 
    229   // file managment
    230   bool blocking = true;
    231   UDT::setsockopt(file_sock, 0, UDT_SNDSYN, &blocking, sizeof(bool));
    232   UDT::setsockopt(file_sock, 0, UDT_RCVSYN, &blocking, sizeof(bool));
    233 
    234   int timeout = 100; // ms
    235   UDT::setsockopt(com_sock, 0, UDT_RCVTIMEO, &timeout, sizeof(int));
    236226
    237227  Start();
     
    292282  while (!ToBeStopped()) {
    293283    ssize_t bytesRead;
    294 
    295284    bytesRead = com->Receive(rcv_buf, rcv_buf_size);
    296 
     285    com->CheckConnection();
     286//printf("%i\n",bytesRead);
    297287    if (bytesRead == (ssize_t)rcv_buf_size)
    298288      Err("FrameworkManager max receive size, augmenter le buffer size!\n");
    299289
    300290    if (bytesRead > 0) {
    301       // printf("recu %ld, trame %x\n",bytesRead,(uint8_t)rcv_buf[0]);
    302       // rcv_buf[bytesRead-1]=0;//pour affichage
    303       // printf("%s\n",rcv_buf);
     291       //printf("recu %ld, trame %x %lld\n",bytesRead,(uint8_t)rcv_buf[0],GetTime()/(1000000));
     292       //rcv_buf[bytesRead-1]=0;//pour affichage
     293       //printf("%s\n",rcv_buf);
    304294
    305295      switch ((uint8_t)rcv_buf[0]) {
     
    376366}
    377367
    378 void FrameworkManager_impl::SendFile(string path, string name) {
     368void FrameworkManager_impl::SendFile(UDTSOCKET socket,string path, string name) {
    379369  char *buf, *more_buf;
    380370  int size;
     
    411401  Printf("sending %s, size: %i\n", filename.c_str(), size);
    412402  // send file information
    413   UDT::sendmsg(file_sock, buf, sizeof(uint8_t) + sizeof(int) + name.size(), -1,true);
     403  UDT::sendmsg(socket, buf, sizeof(uint8_t) + sizeof(int) + name.size(), -1,true);
    414404
    415405  more_buf = (char *)realloc((void *)buf, size);
     
    424414  pbuf->sgetn(buf, size);
    425415  // send the file
    426   nb_write = UDT::sendmsg(file_sock, buf, size, -1, true);
     416  nb_write = UDT::sendmsg(socket, buf, size, -1, true);
    427417
    428418  if (nb_write < 0) {
     
    436426}
    437427
    438 void FrameworkManager_impl::FinishSending() {
     428void FrameworkManager_impl::FinishSending(UDTSOCKET socket) {
    439429  char rm_cmd[256];
    440430
    441431  // send orignal xml
    442   SendFile(log_path, "setup.xml");
     432  SendFile(socket,log_path, "setup.xml");
    443433  sprintf(rm_cmd, "rm %s/setup.xml", log_path.c_str());
    444434  system(rm_cmd);
     
    447437  for (size_t i = 0; i < xml_changes.size(); i++) {
    448438    // Printf("%s\n",xml_changes.at(i).c_str());
    449     SendFile(log_path, xml_changes.at(i).c_str());
     439    SendFile(socket,log_path, xml_changes.at(i).c_str());
    450440    sprintf(rm_cmd, "rm %s/%s", log_path.c_str(), xml_changes.at(i).c_str());
    451441    system(rm_cmd);
     
    454444
    455445  // end notify
    456   char buf = END;
    457   int nb_write = UDT::sendmsg(file_sock, &buf, 1, -1, true);
     446  char buf = END_SENDING_FILES;
     447  int nb_write = UDT::sendmsg(socket, &buf, 1, -1, true);
    458448
    459449  if (nb_write < 0) {
     
    464454
    465455  //wait end ACK
    466   int nb_read = UDT::recvmsg(file_sock,&buf,1);
     456  int nb_read = UDT::recvmsg(socket,&buf,1);
    467457  if(nb_read<0) {
    468458    Err("UDT::recvmsg error (%s)\n",UDT::getlasterror().getErrorMessage());
     
    472462}
    473463
    474 UDTSOCKET FrameworkManager_impl::GetSocket(string address, uint16_t port) {
     464UDTSOCKET FrameworkManager_impl::GetSocket(void) {
    475465  while (1) {
    476466    UDTSOCKET new_fd;
     
    854844              caller->gcs_watchdog->Join();
    855845          }
     846          //create a socket for files
     847          UDTSOCKET file_sock = caller->GetSocket();
     848          char data=START_SENDING_FILES;
     849          ssize_t nb_write = UDT::sendmsg(file_sock, &data, 1, -1, true);
     850          if (nb_write < 0) {
     851            caller->Err("UDT::sendmsg error (%s)\n", UDT::getlasterror().getErrorMessage());
     852            if (UDT::getlasterror().getErrorCode() == CUDTException::ECONNLOST ||
     853                UDT::getlasterror().getErrorCode() == CUDTException::EINVSOCK) {
     854            }
     855          } else if (nb_write != 1) {
     856            caller->Err("%s, code %i (%ld/%ld)\n", UDT::getlasterror().getErrorMessage(),
     857                UDT::getlasterror().getErrorCode(), nb_write, 1);
     858          }
    856859          for (size_t i = 0; i < logs.size(); i++) {
    857860            if (logs.at(i).dbtFile != NULL) {
     
    859862
    860863              string filename = caller->FileName(logs.at(i).device) + ".dbt";
    861               caller->SendFile(caller->log_path, filename);
     864              caller->SendFile(file_sock,caller->log_path, filename);
    862865
    863866              fstream txt_file;
     
    870873              txt_file.close();
    871874
    872               caller->SendFile(caller->log_path, filename);
     875              caller->SendFile(file_sock,caller->log_path, filename);
    873876            }
    874877          }
    875878          // a revoir celui ci est le xml enregistré et pas forcement l'actuel
    876879          // if(caller->xml_file!="") caller->SendFile(caller->xml_file);
    877           caller->FinishSending();
     880          caller->FinishSending(file_sock);
     881         
     882          int status = UDT::close(file_sock);
     883          if (status != 0)
     884            caller->Err("Error udt::close %s", UDT::getlasterror().getErrorMessage());
    878885
    879886          logs.clear();
Note: See TracChangeset for help on using the changeset viewer.