source: XIOS/dev/dev_trunk_graph/src/filter/client_from_client_source_filter.cpp @ 2019

Last change on this file since 2019 was 2019, checked in by yushan, 3 years ago

Graph intermedia commit to a tmp branch

  • Property svn:executable set to *
File size: 1.9 KB
Line 
1#include "grid.hpp"
2#include "exception.hpp"
3#include "calendar_util.hpp"
4#include "field.hpp"
5#include "context.hpp"
6#include "grid.hpp"
7#include <limits>
8#include "workflow_graph.hpp"
9
10namespace xios
11{
12    CClientFromClientSourceFilter::CClientFromClientSourceFilter(CGarbageCollector& gc, CField* field)
13     : COutputPin(gc, true)
14    {
15      CContext* context = CContext::getCurrent();
16      field_=field ;
17      grid_= field-> getGrid();
18
19      freqOp_ = field->freq_op ;
20      lastDateReceived_ = context->getCalendar()->getInitDate();
21      offset_ = field->freq_offset ;
22    }
23
24  void CClientFromClientSourceFilter::streamData(CEventServer& event)
25  {
26    // unlikely to input from file server where data are received at ts=0
27    // for coupling, it would be after the first freq_op, because for now we don't have
28    // restart mecanism to send the value at ts=0. It must be changed in future
29 
30    if (wasDataAlreadyReceived_) lastDateReceived_ = lastDateReceived_ + freqOp_;
31    else wasDataAlreadyReceived_ = true ;
32
33    CDate date = lastDateReceived_ + offset_; // not sure is usefull check it for all filters
34
35    CDataPacketPtr packet(new CDataPacket);
36    packet->date = date;
37    packet->timestamp = date;
38    packet->status = CDataPacket::NO_ERROR;
39
40    grid_->getClientFromClientConnector()->transfer(event,packet->data) ;
41
42    if(this->graphEnabled)
43    {
44      this->graphPackage->filterId = CWorkflowGraph::getNodeSize();
45      CWorkflowGraph::addNode("Client to Client Source filter", 1, false, 0, packet);
46    }
47    onOutputReady(packet);
48  }
49
50  bool CClientFromClientSourceFilter::isDataLate(void)
51  {
52    bool isDataLate ;
53    CDate currentDate = CContext::getCurrent()->getCalendar()->getCurrentDate() ;
54    if (wasDataAlreadyReceived_) isDataLate = lastDateReceived_ + offset_ + freqOp_ <= currentDate ;
55    else isDataLate = CContext::getCurrent()->getCalendar()->getInitDate()+ offset_ <= currentDate ;
56  }
57
58} // namespace xios
Note: See TracBrowser for help on using the repository browser.