Changeset 799 for XIOS/branchs/xios-1.0/src/node/context.cpp
- Timestamp:
- 11/27/15 09:55:05 (8 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
XIOS/branchs/xios-1.0/src/node/context.cpp
r535 r799 7 7 #include "duration.hpp" 8 8 9 #include "cxios.hpp" 9 10 #include "context_client.hpp" 10 11 #include "context_server.hpp" … … 268 269 hasClient=true ; 269 270 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()) ; 270 278 } 271 279 … … 279 287 hasServer=true ; 280 288 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()) ; 281 295 } 282 296 … … 290 304 if (hasClient && !hasServer) 291 305 { 306 if (hasClient) sendRegistry() ; 292 307 client->finalize() ; 293 308 } … … 295 310 { 296 311 closeAllFile() ; 312 registryOut->hierarchicalGatherRegistry() ; 313 if (server->intraCommRank==0) CXios::globalRegistry->mergeRegistry(*registryOut) ; 297 314 } 298 315 } … … 429 446 return true ; 430 447 break ; 448 case EVENT_ID_SEND_REGISTRY: 449 recvRegistry(event); 450 return true; 451 break; 431 452 default : 432 453 ERROR("bool CContext::dispatchEvent(CEventServer& event)", … … 564 585 return (context); 565 586 } 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 } 566 621 } // namespace xios
Note: See TracChangeset
for help on using the changeset viewer.