Ignore:
Timestamp:
11/10/16 13:29:57 (8 years ago)
Author:
mhnguyen
Message:

First working version.
There are more things to do with it

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/dev/dev_olga/src/node/context.cpp

    r983 r987  
    521521     } 
    522522 
     523    // We have a xml tree on the server side and now, it should be also processed 
     524   // if (hasClient && !hasServer) sendPostProcessing(); 
     525 
    523526//     // Now tell server that it can process all messages from client 
    524527// //    if (hasClient && !hasServer) this->sendCloseDefinition(); 
    525528     if (hasClient) this->sendCloseDefinition(); 
    526  
    527     // We have a xml tree on the server side and now, it should be also processed 
    528 //    if (hasClient && !hasServer) sendPostProcessing(); 
    529529 
    530530    // There are some processings that should be done after all of above. For example: check mask or index 
     
    536536      this->solveAllRefOfEnabledFields(true); 
    537537    } 
     538 
     539 
    538540 
    539541//    // Now tell server that it can process all messages from client 
     
    763765   void CContext::sendCloseDefinition(void) 
    764766   { 
     767     // Use correct context client to send message 
     768     CContextClient* contextClientTmp = (0 != clientPrimServer) ? clientPrimServer : client; 
    765769     CEventClient event(getType(),EVENT_ID_CLOSE_DEFINITION); 
    766      if (!hasServer) 
    767      { 
    768        if (client->isServerLeader()) 
    769        { 
    770          CMessage msg; 
    771          msg<<this->getIdServer(); 
    772          const std::list<int>& ranks = client->getRanksServerLeader(); 
    773          for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    774            event.push(*itRank,1,msg); 
    775          client->sendEvent(event); 
    776        } 
    777        else client->sendEvent(event); 
    778      } 
    779      else 
    780      { 
    781        if (clientPrimServer->isServerLeader()) 
    782        { 
    783          CMessage msg; 
    784          msg<<this->getIdServer(); 
    785          const std::list<int>& ranks = clientPrimServer->getRanksServerLeader(); 
    786          for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    787            event.push(*itRank,1,msg); 
    788          clientPrimServer->sendEvent(event); 
    789        } 
    790        else clientPrimServer->sendEvent(event); 
    791  
    792      } 
     770 
     771     if (contextClientTmp->isServerLeader()) 
     772     { 
     773       CMessage msg; 
     774       msg<<this->getIdServer(); 
     775       const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 
     776       for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     777         event.push(*itRank,1,msg); 
     778       contextClientTmp->sendEvent(event); 
     779     } 
     780     else contextClientTmp->sendEvent(event); 
     781 
     782     // if (!hasServer) 
     783     // { 
     784     //   if (client->isServerLeader()) 
     785     //   { 
     786     //     CMessage msg; 
     787     //     msg<<this->getIdServer(); 
     788     //     const std::list<int>& ranks = client->getRanksServerLeader(); 
     789     //     for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     790     //       event.push(*itRank,1,msg); 
     791     //     client->sendEvent(event); 
     792     //   } 
     793     //   else client->sendEvent(event); 
     794     // } 
     795     // else 
     796     // { 
     797     //   if (clientPrimServer->isServerLeader()) 
     798     //   { 
     799     //     CMessage msg; 
     800     //     msg<<this->getIdServer(); 
     801     //     const std::list<int>& ranks = clientPrimServer->getRanksServerLeader(); 
     802     //     for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     803     //       event.push(*itRank,1,msg); 
     804     //     clientPrimServer->sendEvent(event); 
     805     //   } 
     806     //   else clientPrimServer->sendEvent(event); 
     807 
     808     // } 
    793809   } 
    794810 
     
    796812   void CContext::recvCloseDefinition(CEventServer& event) 
    797813   { 
    798  
    799814      CBufferIn* buffer=event.subEvents.begin()->buffer; 
    800815      string id; 
    801816      *buffer>>id; 
    802817      get(id)->closeDefinition(); 
     818      if (get(id)->hasClient && get(id)->hasServer) 
     819      {         
     820        get(id)->sendCloseDefinition(); 
     821      } 
    803822   } 
    804823 
     
    806825   void CContext::sendUpdateCalendar(int step) 
    807826   { 
     827     // Use correct context client to send message 
     828     CContextClient* contextClientTmp = (0 != clientPrimServer) ? clientPrimServer : client; 
    808829     CEventClient event(getType(),EVENT_ID_UPDATE_CALENDAR); 
    809      if (!hasServer) 
    810      { 
    811        if (client->isServerLeader()) 
     830 
     831       if (contextClientTmp->isServerLeader()) 
    812832       { 
    813833         CMessage msg; 
    814834         msg<<this->getIdServer()<<step; 
    815          const std::list<int>& ranks = client->getRanksServerLeader(); 
     835         const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 
    816836         for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    817837           event.push(*itRank,1,msg); 
    818          client->sendEvent(event); 
     838         contextClientTmp->sendEvent(event); 
    819839       } 
    820        else client->sendEvent(event); 
    821      } 
    822      else 
    823      { 
    824        if (clientPrimServer->isServerLeader()) 
    825        { 
    826          CMessage msg; 
    827          msg<<this->getIdServer()<<step; 
    828          const std::list<int>& ranks = clientPrimServer->getRanksServerLeader(); 
    829          for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    830            event.push(*itRank,1,msg); 
    831          clientPrimServer->sendEvent(event); 
    832        } 
    833        else clientPrimServer->sendEvent(event); 
    834      } 
     840       else contextClientTmp->sendEvent(event); 
     841 
     842     // if (!hasServer) 
     843     // { 
     844     //   if (client->isServerLeader()) 
     845     //   { 
     846     //     CMessage msg; 
     847     //     msg<<this->getIdServer()<<step; 
     848     //     const std::list<int>& ranks = client->getRanksServerLeader(); 
     849     //     for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     850     //       event.push(*itRank,1,msg); 
     851     //     client->sendEvent(event); 
     852     //   } 
     853     //   else client->sendEvent(event); 
     854     // } 
     855     // else 
     856     // { 
     857     //   if (clientPrimServer->isServerLeader()) 
     858     //   { 
     859     //     CMessage msg; 
     860     //     msg<<this->getIdServer()<<step; 
     861     //     const std::list<int>& ranks = clientPrimServer->getRanksServerLeader(); 
     862     //     for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     863     //       event.push(*itRank,1,msg); 
     864     //     clientPrimServer->sendEvent(event); 
     865     //   } 
     866     //   else clientPrimServer->sendEvent(event); 
     867     // } 
    835868   } 
    836869 
     
    850883      buffer>>step; 
    851884      updateCalendar(step); 
     885      if (hasClient && hasServer) 
     886      {         
     887        sendUpdateCalendar(step); 
     888      } 
    852889   } 
    853890 
     
    855892   void CContext::sendCreateFileHeader(void) 
    856893   { 
     894     // Use correct context client to send message 
     895     CContextClient* contextClientTmp = (0 != clientPrimServer) ? clientPrimServer : client; 
    857896     CEventClient event(getType(),EVENT_ID_CREATE_FILE_HEADER); 
    858897 
    859      if (!hasServer) 
    860      { 
    861        if (client->isServerLeader()) 
    862        { 
    863          CMessage msg; 
    864          msg<<this->getIdServer(); 
    865          const std::list<int>& ranks = client->getRanksServerLeader(); 
    866          for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    867            event.push(*itRank,1,msg) ; 
    868          client->sendEvent(event); 
    869        } 
    870        else client->sendEvent(event); 
    871      } 
    872      else 
    873      { 
    874        if (clientPrimServer->isServerLeader()) 
    875        { 
    876          CMessage msg; 
    877          msg<<this->getIdServer(); 
    878          const std::list<int>& ranks = clientPrimServer->getRanksServerLeader(); 
    879          for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    880            event.push(*itRank,1,msg) ; 
    881          clientPrimServer->sendEvent(event); 
    882        } 
    883        else clientPrimServer->sendEvent(event); 
    884      } 
     898     if (contextClientTmp->isServerLeader()) 
     899     { 
     900       CMessage msg; 
     901       msg<<this->getIdServer(); 
     902       const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 
     903       for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     904         event.push(*itRank,1,msg) ; 
     905       contextClientTmp->sendEvent(event); 
     906     } 
     907     else contextClientTmp->sendEvent(event); 
     908 
     909     // if (!hasServer) 
     910     // { 
     911     //   if (client->isServerLeader()) 
     912     //   { 
     913     //     CMessage msg; 
     914     //     msg<<this->getIdServer(); 
     915     //     const std::list<int>& ranks = client->getRanksServerLeader(); 
     916     //     for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     917     //       event.push(*itRank,1,msg) ; 
     918     //     client->sendEvent(event); 
     919     //   } 
     920     //   else client->sendEvent(event); 
     921     // } 
     922     // else 
     923     // { 
     924     //   if (clientPrimServer->isServerLeader()) 
     925     //   { 
     926     //     CMessage msg; 
     927     //     msg<<this->getIdServer(); 
     928     //     const std::list<int>& ranks = clientPrimServer->getRanksServerLeader(); 
     929     //     for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     930     //       event.push(*itRank,1,msg) ; 
     931     //     clientPrimServer->sendEvent(event); 
     932     //   } 
     933     //   else clientPrimServer->sendEvent(event); 
     934     // } 
    885935   } 
    886936 
     
    897947   void CContext::recvCreateFileHeader(CBufferIn& buffer) 
    898948   { 
    899       createFileHeader(); 
     949     // The creation of header file should be delegated to server2, for now 
     950      if (hasClient && hasServer) 
     951      {         
     952        sendCreateFileHeader(); 
     953      } 
     954       
     955      if (!hasClient && hasServer)  
     956        createFileHeader(); 
    900957   } 
    901958 
     
    903960   void CContext::sendPostProcessing() 
    904961   { 
    905      if (hasClient) 
    906      { 
    907        if (!hasServer) 
    908        { 
    909          CEventClient event(getType(),EVENT_ID_POST_PROCESS); 
    910          if (client->isServerLeader()) 
    911          { 
    912            CMessage msg; 
    913            msg<<this->getIdServer(); 
    914            const std::list<int>& ranks = client->getRanksServerLeader(); 
    915            for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    916              event.push(*itRank,1,msg); 
    917            client->sendEvent(event); 
    918          } 
    919          else client->sendEvent(event); 
    920        } 
    921        else 
    922        { 
    923          CEventClient event(getType(),EVENT_ID_POST_PROCESS); 
    924          if (clientPrimServer->isServerLeader()) 
    925          { 
    926            CMessage msg; 
    927            msg<<this->getIdServer(); 
    928            const std::list<int>& ranks = clientPrimServer->getRanksServerLeader(); 
    929            for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    930              event.push(*itRank,1,msg); 
    931            clientPrimServer->sendEvent(event); 
    932          } 
    933          else clientPrimServer->sendEvent(event); 
    934        } 
    935      } 
     962      // Use correct context client to send message 
     963     CContextClient* contextClientTmp = (0 != clientPrimServer) ? clientPrimServer : client; 
     964     CEventClient event(getType(),EVENT_ID_POST_PROCESS); 
     965 
     966     if (contextClientTmp->isServerLeader()) 
     967     { 
     968       CMessage msg; 
     969       msg<<this->getIdServer(); 
     970       const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 
     971       for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     972         event.push(*itRank,1,msg); 
     973       contextClientTmp->sendEvent(event); 
     974     } 
     975     else contextClientTmp->sendEvent(event); 
     976 
     977     // if (hasClient) 
     978     // { 
     979     //   if (!hasServer) 
     980     //   { 
     981     //     CEventClient event(getType(),EVENT_ID_POST_PROCESS); 
     982     //     if (client->isServerLeader()) 
     983     //     { 
     984     //       CMessage msg; 
     985     //       msg<<this->getIdServer(); 
     986     //       const std::list<int>& ranks = client->getRanksServerLeader(); 
     987     //       for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     988     //         event.push(*itRank,1,msg); 
     989     //       client->sendEvent(event); 
     990     //     } 
     991     //     else client->sendEvent(event); 
     992     //   } 
     993     //   else 
     994     //   { 
     995     //     CEventClient event(getType(),EVENT_ID_POST_PROCESS); 
     996     //     if (clientPrimServer->isServerLeader()) 
     997     //     { 
     998     //       CMessage msg; 
     999     //       msg<<this->getIdServer(); 
     1000     //       const std::list<int>& ranks = clientPrimServer->getRanksServerLeader(); 
     1001     //       for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     1002     //         event.push(*itRank,1,msg); 
     1003     //       clientPrimServer->sendEvent(event); 
     1004     //     } 
     1005     //     else clientPrimServer->sendEvent(event); 
     1006     //   } 
     1007     // } 
    9361008   } 
    9371009 
     
    13881460 
    13891461  void CContext::sendRegistry(void) 
    1390   { 
     1462  {     
    13911463    registryOut->hierarchicalGatherRegistry() ; 
    13921464 
     1465          // Use correct context client to send message 
     1466     CContextClient* contextClientTmp = (0 != clientPrimServer) ? clientPrimServer : client; 
    13931467    CEventClient event(CContext::GetType(), CContext::EVENT_ID_SEND_REGISTRY); 
    1394     if (!hasServer) 
    1395     { 
    1396       if (client->isServerLeader()) 
     1468          if (contextClientTmp->isServerLeader()) 
    13971469      { 
    13981470         CMessage msg ; 
    13991471         msg<<this->getIdServer(); 
    1400          if (client->clientRank==0) msg<<*registryOut ; 
     1472         if (contextClientTmp->clientRank==0) msg<<*registryOut ; 
    14011473         const std::list<int>& ranks = client->getRanksServerLeader(); 
    14021474         for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    14031475           event.push(*itRank,1,msg); 
    1404          client->sendEvent(event); 
     1476         contextClientTmp->sendEvent(event); 
    14051477       } 
    1406        else client->sendEvent(event); 
    1407     } 
    1408     else 
    1409     { 
    1410       if (clientPrimServer->isServerLeader()) 
    1411       { 
    1412          CMessage msg ; 
    1413          msg<<this->getIdServer(); 
    1414          if (clientPrimServer->clientRank==0) msg<<*registryOut ; 
    1415          const std::list<int>& ranks = clientPrimServer->getRanksServerLeader(); 
    1416          for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    1417            event.push(*itRank,1,msg); 
    1418          clientPrimServer->sendEvent(event); 
    1419        } 
    1420        else clientPrimServer->sendEvent(event); 
    1421  
    1422     } 
     1478       else contextClientTmp->sendEvent(event); 
     1479 
     1480    // if (!hasServer) 
     1481    // { 
     1482    //   if (client->isServerLeader()) 
     1483    //   { 
     1484    //      CMessage msg ; 
     1485    //      msg<<this->getIdServer(); 
     1486    //      if (client->clientRank==0) msg<<*registryOut ; 
     1487    //      const std::list<int>& ranks = client->getRanksServerLeader(); 
     1488    //      for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     1489    //        event.push(*itRank,1,msg); 
     1490    //      client->sendEvent(event); 
     1491    //    } 
     1492    //    else client->sendEvent(event); 
     1493    // } 
     1494    // else 
     1495    // { 
     1496    //   if (clientPrimServer->isServerLeader()) 
     1497    //   { 
     1498    //      CMessage msg ; 
     1499    //      msg<<this->getIdServer(); 
     1500    //      if (clientPrimServer->clientRank==0) msg<<*registryOut ; 
     1501    //      const std::list<int>& ranks = clientPrimServer->getRanksServerLeader(); 
     1502    //      for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     1503    //        event.push(*itRank,1,msg); 
     1504    //      clientPrimServer->sendEvent(event); 
     1505    //    } 
     1506    //    else clientPrimServer->sendEvent(event); 
     1507    // } 
    14231508  } 
    14241509 
Note: See TracChangeset for help on using the changeset viewer.