source: XIOS/dev/branch_yushan/src/context_client.hpp @ 1073

Last change on this file since 1073 was 1053, checked in by yushan, 7 years ago

ep_lib namespace specified when netcdf involved

  • Property copyright set to
    Software name : XIOS (Xml I/O Server)
    http://forge.ipsl.jussieu.fr/ioserver
    Creation date : January 2009
    Licence : CeCCIL version2
    see license file in root directory : Licence_CeCILL_V2-en.txt
    or http://www.cecill.info/licences/Licence_CeCILL_V2-en.html
    Holder : CEA/LSCE (Laboratoire des Sciences du CLimat et de l'Environnement)
    CNRS/IPSL (Institut Pierre Simon Laplace)
    Project Manager : Yann Meurdesoif
    yann.meurdesoif@cea.fr
File size: 2.8 KB
Line 
1#ifndef __CONTEXT_CLIENT_HPP__
2#define __CONTEXT_CLIENT_HPP__
3
4#include "xios_spl.hpp"
5#include "buffer_out.hpp"
6#include "buffer_in.hpp"
7#include "buffer_client.hpp"
8#include "event_client.hpp"
9#include "event_server.hpp"
10#include "mpi.hpp"
11#include "registry.hpp"
12#ifdef _usingEP
13//#include "ep_declaration.hpp"
14#endif
15
16
17namespace xios
18{
19  class CContext;
20
21  /*!
22  \class CContextClient
23  A context can be both on client and on server side. In order to differenciate the role of
24  context on each side, e.x client sending events, server receiving and processing events, there is a need of
25  concrete "context" classes for both sides.
26  CContextClient processes and sends events from client to server where CContextServer receives these events
27  and processes them.
28  */
29  class CContextClient
30  {
31    public:
32      // Contructor
33      CContextClient(CContext* parent, ep_lib::MPI_Comm intraComm, ep_lib::MPI_Comm interComm, CContext* parentServer = 0);
34
35      // Send event to server
36      void sendEvent(CEventClient& event);
37      void waitEvent(list<int>& ranks);
38
39      // Functions relates to set/get buffers
40      list<CBufferOut*> getBuffers(list<int>& serverlist, list<int>& sizeList);
41      void newBuffer(int rank);
42      bool checkBuffers(list<int>& ranks);
43      bool checkBuffers(void);
44      void releaseBuffers(void);
45
46      bool isServerLeader(void) const;
47      const std::list<int>& getRanksServerLeader(void) const;
48
49      bool isAttachedModeEnabled() const;
50
51      // Close and finalize context client
52      void closeContext(void);
53      void finalize(void);
54
55      void setBufferSize(const std::map<int,StdSize>& mapSize, const std::map<int,StdSize>& maxEventSize);
56
57    public:
58      CContext* context; //!< Context for client
59
60      size_t timeLine; //!< Timeline of each event
61
62      int clientRank; //!< Rank of current client
63
64      int clientSize; //!< Size of client group
65
66      int serverSize; //!< Size of server group
67
68      ep_lib::MPI_Comm interComm; //!< Communicator of server group
69
70      ep_lib::MPI_Comm intraComm; //!< Communicator of client group
71
72      map<int,CClientBuffer*> buffers; //!< Buffers for connection to servers
73
74    private:
75      //! Mapping of server and buffer size for each connection to server
76      std::map<int,StdSize> mapBufferSize_;
77      //! Maximum number of events that can be buffered
78      StdSize maxBufferedEvents;
79
80      //! Context for server (Only used in attached mode)
81      CContext* parentServer;
82
83      //! List of server ranks for which the client is leader
84      std::list<int> ranksServerLeader;
85
86    public: // Some function should be removed in the future
87      //    void registerEvent(CEventClient& event);
88//    list<CBufferOut*> newEvent(CEventClient& event,list<int>& sizes);
89//    bool locked;
90//    set<int> connectedServer;
91
92  };
93}
94
95#endif // __CONTEXT_CLIENT_HPP__
Note: See TracBrowser for help on using the repository browser.