Ignore:
Timestamp:
12/05/16 17:47:54 (7 years ago)
Author:
oabramkina
Message:

First working version with compression by secondary servers.

File:
1 edited

Legend:

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

    r987 r1009  
    8585     if (context->hasClient) 
    8686     { 
    87            // Use correct context client to send message 
    88        CContextClient* contextClientTmp = (0 != context->clientPrimServer) ? context->clientPrimServer  
    89                                                                            : context->client; 
    90  
    91        CEventClient event(this->getType(),EVENT_ID_VARIABLE_VALUE) ; 
    92        if (contextClientTmp->isServerLeader()) 
     87       // Use correct context client to send message 
     88       int nbSrvPools = (context->hasServer) ? context->clientPrimServer.size() : 1; 
     89       for (int i = 0; i < nbSrvPools; ++i) 
    9390       { 
    94          CMessage msg ; 
    95          msg<<this->getId() ; 
    96          msg<<content ; 
    97          const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 
    98          for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
    99            event.push(*itRank,1,msg); 
    100          contextClientTmp->sendEvent(event) ; 
    101        } 
    102        else contextClientTmp->sendEvent(event) ; 
    103     } 
    104  
     91//       CContextClient* contextClientTmp = (0 != context->clientPrimServer) ? context->clientPrimServer 
     92         CContextClient* contextClientTmp = (context->hasServer) ? context->clientPrimServer[i] 
     93                                                                             : context->client; 
     94 
     95         CEventClient event(this->getType(),EVENT_ID_VARIABLE_VALUE) ; 
     96         if (contextClientTmp->isServerLeader()) 
     97         { 
     98           CMessage msg ; 
     99           msg<<this->getId() ; 
     100           msg<<content ; 
     101           const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 
     102           for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     103             event.push(*itRank,1,msg); 
     104           contextClientTmp->sendEvent(event) ; 
     105         } 
     106         else contextClientTmp->sendEvent(event) ; 
     107      } 
     108     } 
    105109 
    106110    //  if (!context->hasServer) 
     
    123127   } 
    124128 
     129   void CVariable::sendValue(const int srvPool) 
     130   { 
     131     CContext* context=CContext::getCurrent() ; 
     132     CContextClient* contextClientTmp = context->clientPrimServer[srvPool]; 
     133     CEventClient event(this->getType(),EVENT_ID_VARIABLE_VALUE) ; 
     134     if (contextClientTmp->isServerLeader()) 
     135     { 
     136       CMessage msg ; 
     137       msg<<this->getId() ; 
     138       msg<<content ; 
     139       const std::list<int>& ranks = contextClientTmp->getRanksServerLeader(); 
     140       for (std::list<int>::const_iterator itRank = ranks.begin(), itRankEnd = ranks.end(); itRank != itRankEnd; ++itRank) 
     141         event.push(*itRank,1,msg); 
     142       contextClientTmp->sendEvent(event) ; 
     143     } 
     144     else contextClientTmp->sendEvent(event) ; 
     145   } 
     146 
    125147   /* 
    126148   *\brief Receive value of a variable with its id from client to server 
Note: See TracChangeset for help on using the changeset viewer.