Ignore:
Timestamp:
11/27/15 09:55:05 (8 years ago)
Author:
rlacroix
Message:

Add registry

File:
1 edited

Legend:

Unmodified
Added
Removed
  • XIOS/branchs/xios-1.0/src/node/context.cpp

    r535 r799  
    77#include "duration.hpp" 
    88 
     9#include "cxios.hpp" 
    910#include "context_client.hpp" 
    1011#include "context_server.hpp" 
     
    268269     hasClient=true ; 
    269270     client = new CContextClient(this,intraComm, interComm) ; 
     271     registryIn=new CRegistry(intraComm); 
     272     registryIn->setPath(getId()) ; 
     273     if (client->clientRank==0) registryIn->fromFile("xios_registry.bin") ; 
     274     registryIn->bcastRegistry() ; 
     275 
     276     registryOut=new CRegistry(intraComm) ; 
     277     registryOut->setPath(getId()) ; 
    270278   }  
    271279 
     
    279287     hasServer=true ; 
    280288     server = new CContextServer(this,intraComm,interComm) ; 
     289     registryIn=new CRegistry(intraComm); 
     290     registryIn->setPath(getId()) ; 
     291     if (server->intraCommRank==0) registryIn->fromFile("xios_registry.bin") ; 
     292     registryIn->bcastRegistry() ; 
     293     registryOut=new CRegistry(intraComm) ; 
     294     registryOut->setPath(getId()) ; 
    281295   }  
    282296 
     
    290304      if (hasClient && !hasServer) 
    291305      { 
     306         if (hasClient) sendRegistry() ; 
    292307         client->finalize() ; 
    293308      } 
     
    295310      { 
    296311        closeAllFile() ; 
     312        registryOut->hierarchicalGatherRegistry() ; 
     313        if (server->intraCommRank==0) CXios::globalRegistry->mergeRegistry(*registryOut) ; 
    297314      } 
    298315   } 
     
    429446             return true ; 
    430447             break ; 
     448           case EVENT_ID_SEND_REGISTRY: 
     449            recvRegistry(event); 
     450            return true; 
     451           break; 
    431452           default : 
    432453             ERROR("bool CContext::dispatchEvent(CEventServer& event)", 
     
    564585    return (context); 
    565586  } 
     587 
     588  void CContext::recvRegistry(CEventServer& event) 
     589  { 
     590    CBufferIn* buffer=event.subEvents.begin()->buffer; 
     591    string id; 
     592    *buffer>>id; 
     593    get(id)->recvRegistry(*buffer); 
     594  } 
     595 
     596  void CContext::recvRegistry(CBufferIn& buffer) 
     597  { 
     598    if (server->intraCommRank==0) 
     599    { 
     600      CRegistry registry(server->intraComm) ; 
     601      registry.fromBuffer(buffer) ; 
     602      registryOut->mergeRegistry(registry) ; 
     603    } 
     604  } 
     605 
     606  void CContext::sendRegistry(void) 
     607  { 
     608    registryOut->hierarchicalGatherRegistry() ; 
     609 
     610    CEventClient event(CContext::GetType(), CContext::EVENT_ID_SEND_REGISTRY); 
     611    if (client->isServerLeader()) 
     612    { 
     613       CMessage msg ; 
     614       msg<<this->getId(); 
     615       if (client->clientRank==0) msg<<*registryOut ; 
     616       event.push(client->getServerLeader(),1,msg); 
     617       client->sendEvent(event); 
     618     } 
     619     else client->sendEvent(event); 
     620  } 
    566621} // namespace xios 
Note: See TracChangeset for help on using the changeset viewer.