source: XIOS3/trunk/src/filter/client_to_server_store_filter.cpp @ 2628

Last change on this file since 2628 was 2628, checked in by jderouillat, 7 weeks ago

New timers integration/reporting

  • Property svn:eol-style set to native
  • Property svn:executable set to *
File size: 2.4 KB
Line 
1#include "client_to_server_store_filter.hpp"
2#include "exception.hpp"
3#include "field.hpp"
4#include "utils.hpp"
5#include "context_client.hpp"
6#include "timer.hpp"
7#include "field.hpp"
8#include "grid.hpp"
9#include "workflow_graph.hpp"
10
11namespace xios
12{
13  extern CLogType logProfile ;
14  CClientToServerStoreFilter::CClientToServerStoreFilter(CGarbageCollector& gc, CField* field, CContextClient* client)
15    : CInputPin(gc, 1)
16    , field_(field), client_(client), graphEnabled(false)
17  {
18    if (!field)
19      ERROR("CClientToServerStoreFilter::CClientToServerStoreFilter(CGarbageCollector& gc, CField* field, CContextClient* client)",
20            "The field cannot be null.");
21  }
22
23  void CClientToServerStoreFilter::onInputReady(std::vector<CDataPacketPtr> data)
24  {
25    buildWorkflowGraph(data);
26
27    if (info.isActive(logProfile)) CTimer::get("Field : send data").resume();
28    CEventClient event(field_->getType(), CField::EVENT_ID_UPDATE_DATA);
29    CMessage message ;
30    message<<field_->getId() << data[0]->timestamp ;
31    field_->getSentGrid()->getClientToServerConnector(client_)->transfer(data[0]->data, client_, event, message) ;
32    if (info.isActive(logProfile)) CTimer::get("Field : send data").suspend();
33  }
34
35  void CClientToServerStoreFilter::buildWorkflowGraph(std::vector<CDataPacketPtr> data)
36  {
37    if(this->graphEnabled)
38    {
39      this->graphPackage->filterId = CWorkflowGraph::getNodeSize();
40      if(!data[0]->graphPackage) data[0]->graphPackage = new CGraphDataPackage;
41     
42      std::rotate(this->graphPackage->inFields.begin(), this->graphPackage->inFields.begin() + 1, this->graphPackage->inFields.end());
43     
44      CWorkflowGraph::addNode("Client to Server Store filter", 6, true, 1, data[0]);
45     
46      CWorkflowGraph::addEdge(data[0]->graphPackage->fromFilter, this->graphPackage->filterId, data[0]);
47      // flux can be redirected to other filters. So don't change the 'from' parameter
48      data[0]->graphPackage->currentField = this->graphPackage->inFields[0];
49    }
50  }
51 
52  CContextClient* CClientToServerStoreFilter::getTransferedDataSize(map<int,int>& size)
53  {
54    size = field_->getSentGrid()->getClientToServerConnector(client_)->getTransferedDataSize() ;
55    return client_ ;
56  }
57
58  bool CClientToServerStoreFilter::mustAutoTrigger() const
59  {
60    return true;
61  }
62
63  bool CClientToServerStoreFilter::isDataExpected(const CDate& date) const
64  {
65    return true;
66  }
67} // namespace xios
Note: See TracBrowser for help on using the repository browser.