source: XMLIO_V2/dev/dev_rv/src/xmlio/server.cpp @ 198

Last change on this file since 198 was 198, checked in by hozdoba, 12 years ago
File size: 7.3 KB
Line 
1#include "server.hpp"
2
3namespace xmlioserver {
4namespace comm {
5
6   /// ////////////////////// Définitions ////////////////////// ///
7   
8   CServer::CServer(MPIComm comm_client_server)
9      : blist(comm_client_server)
10   { /* Ne rien faire de plus */ } 
11       
12   CServer::~CServer(void)
13   { /* Ne rien faire de plus */ } 
14   
15   ///--------------------------------------------------------------
16   
17   const CBufferList & CServer::getBufferList(void) const 
18   {
19      return (this->blist);
20   }   
21   
22   //---------------------------------------------------------------
23   
24   void CServer::run(void)
25   {
26      while (this->blist.recvRequests())
27      {
28         long int managerId = -1, methodId  = -1, nbargs  = -1;
29         long int managerId_= -1, methodId_ = -1, nbargs_ = -1;
30         std::vector<CLinearBuffer> lbuffer;
31         this->blist.getRequests(lbuffer);
32                 
33         for (StdSize i = 0; i < lbuffer.size(); i++)
34         {           
35            lbuffer[i].getRequestInfos(0, managerId, methodId, nbargs);
36            if (((managerId_ != managerId) || (methodId_ != methodId) || (nbargs_ != nbargs)) && (i != 0 ))
37            {
38               //std::cout << managerId_ << "<->" << managerId << std::endl
39               //          << methodId_  << "<->" << methodId  << std::endl
40               //          << nbargs_    << "<->" << nbargs    << std::endl;
41               ERROR("CServer::run(void)", << "[" << i << "] Les requêtes ne sont pas synchronisées !");
42            }
43            managerId_ = managerId;
44            methodId_  = methodId;
45            nbargs_    = nbargs;
46         }
47           
48         if (managerId == 0)
49         {
50            switch(methodId)
51            {
52               case (0) :
53                  this->initialize();
54                  continue;
55               case (1) :
56                  this->finalize();
57                  return;
58               default  :
59                  ERROR("CServer::run(void)", 
60                     << "[ managerId = " << managerId << ", "
61                     << "[ methodId = "  << methodId  << ", "
62                     << "[ nbargs = "    << nbargs    << "] "
63                     << " Methode inconnue !");
64            }
65         }
66         if (managerId == 1)
67         {
68            switch(methodId)
69            {
70               case (0) :
71                  this->setContext(lbuffer);
72                  continue;
73               case (1) :
74                  this->updateCalendar(lbuffer);
75                  continue;
76               default  :
77                  ERROR("CServer::run(void)", 
78                     << "[ managerId = " << managerId << ", "
79                     << "[ methodId = "  << methodId  << ", "
80                     << "[ nbargs = "    << nbargs    << "] "
81                     << " Methode inconnue !");
82            }
83         }
84         if (managerId == 2)
85         {
86            switch(methodId)
87            {
88               case (0) :
89                  this->writeData(lbuffer, 4);
90                  continue;
91               case (1) :
92                  this->writeData(lbuffer, 8);
93                  continue;
94               default  :
95                  ERROR("CServer::run(void)", 
96                     << "[ managerId = " << managerId << ", "
97                     << "[ methodId = "  << methodId  << ", "
98                     << "[ nbargs = "    << nbargs    << "] "
99                     << " Methode inconnue !");
100            }
101         }
102         ERROR("CServer::run(void)", 
103                << "[ managerId = " << managerId << ", "
104                << "[ methodId = "  << methodId  << ", "
105                << "[ nbargs = "    << nbargs    << "] "
106                << " Methode inconnue !");
107      }
108   }
109
110   //--------------------------------------------------------------
111   
112   void CServer::initialize(void) // manager 0, method 0
113   {
114      std::cout << "initialize called " << std::endl;
115   }
116   
117   //--------------------------------------------------------------
118   
119   void CServer::finalize(void) // manager 0, method 1
120   {
121      std::cout << "finalize called " << std::endl;
122   }   
123   
124   //--------------------------------------------------------------
125             
126   void CServer::setContext(const std::vector<CLinearBuffer> & buffer) // manager 1, method 0
127   { 
128      StdString contextId;
129      for (StdSize i = 0; i < buffer.size(); i++)
130      {
131         StdString contextId_ = buffer[i].getString(3);
132         if (contextId.compare(contextId_) != 0 && (i != 0))
133         {
134            ERROR("CServer::setContext(const std::vector<CLinearBuffer> & buffer)", 
135                  << "[ contextId 1 = " << contextId   << ", "
136                  << "[ contextId 2 = " << contextId_  << "] "
137                  << " Changement de contexte désynchronisé !");
138         }
139         else contextId = contextId_;
140         
141      }
142      std::cout << "setContext called " << contextId << std::endl;
143   }
144   
145   //--------------------------------------------------------------
146   
147   void CServer::updateCalendar(const std::vector<CLinearBuffer> & buffer) // manager 1, method 1
148   {
149      int timestep = -1;
150      for (StdSize i = 0; i < buffer.size(); i++)
151      {
152         int timestep_ = buffer[i].getInt(3);
153         if ((timestep_ != timestep)  && (i != 0))
154         {
155            ERROR("CServer::updateCalendar(const std::vector<CLinearBuffer> & buffer)", 
156                  << "[ timestep 1 = " << timestep   << ", "
157                  << "[ timestep 2 = " << timestep_  << "] "
158                  << " Mise à jour du calendrier désynchronisée !");
159         }
160         else timestep = timestep_;
161         
162      }
163      std::cout << "updateCalendar called " << timestep <<std::endl;
164   }
165   
166   //--------------------------------------------------------------
167         
168   void CServer::writeData(const std::vector<CLinearBuffer> & buffer, int prec)  // manager 2, method 0 - 1
169   {
170      StdString fieldId;
171      for (StdSize i = 0; i < buffer.size(); i++)
172      {
173         StdString fieldId_ = buffer[i].getString(3);
174         if (fieldId.compare(fieldId_) != 0 && (i != 0))
175         {           
176            ERROR("CServer::writeData(const std::vector<CLinearBuffer> & buffer, int prec)", 
177                  << "[fieldId 1 = " << fieldId   << ", "
178                  << " fieldId 2 = " << fieldId_  << "] "
179                  << " Ecriture des données désynchronisée !");
180         }
181         else fieldId = fieldId_;         
182      }
183     
184      if (prec == 4)
185      {
186         std::deque<ARRAY(float, 1)> dataArray(buffer.size());
187         for (StdSize i = 0; i < buffer.size(); i++)
188            dataArray[i] = buffer[i].getFloatArray(4);
189
190         std::cout << "writeData called (float) " << fieldId << ", " << dataArray[0] << std::endl;
191         return;
192      }     
193      else if (prec == 8)
194      {
195         std::deque<ARRAY(double, 1)> dataArray(buffer.size());
196         for (StdSize i = 0; i < buffer.size(); i++)
197            dataArray[i] = buffer[i].getDoubleArray(4);
198
199         std::cout << "writeData called (double) " << fieldId << ", " << dataArray[0]  << std::endl;
200         return;
201      }     
202      else
203      {
204         ERROR("CServer::writeData(const std::vector<CLinearBuffer> & buffer, int prec)", 
205               << " Précision des données invalide !");
206      }
207   }
208 
209   ///--------------------------------------------------------------
210   
211   
212} // namespace comm
213} // namespace xmlioserver
Note: See TracBrowser for help on using the repository browser.