Salome HOME
Increment version: 9.12.0
[samples/dsccode.git] / src / DSCCODDENG / DSCCODDENG.cxx
1 using namespace std;
2 #include "DSCCODDENG.hxx"
3 #include <string>
4 #include <unistd.h>
5 #include "CalciumInterface.hxx"
6 #include <calcium.h>
7
8 //! Constructor for component "DSCCODD" instance
9 /*!
10  *  
11  */
12 DSCCODD_i::DSCCODD_i(CORBA::ORB_ptr orb, 
13                      PortableServer::POA_ptr poa, 
14                      PortableServer::ObjectId * contId, 
15                      const char *instanceName, 
16                      const char *interfaceName) 
17           : Superv_Component_i(orb, poa, contId, instanceName, interfaceName)
18 {
19   cerr << "create component" << endl;
20   _thisObj = this ;
21   _id = _poa->activate_object(_thisObj);
22 }
23
24 //! Destructor for component "DSCCODD" instance
25 DSCCODD_i::~DSCCODD_i()
26 {
27 }
28
29 //! Register datastream ports for a component service given its name
30 /*!
31  *  \param service_name : service name
32  *  \return true if port registering succeeded, false if not
33  */
34 CORBA::Boolean
35 DSCCODD_i::init_service(const char * service_name) {
36   CORBA::Boolean rtn = false;
37   string s_name(service_name);
38   if (s_name == "prun") 
39     {
40       try
41         {
42           std::cerr << "DSCCODD: prun: "  << std::endl;
43           //initialization CALCIUM ports
44           calcium_integer_port_provides * p1;
45           /* ETP_EN  T       IN      ENTIER */
46           p1 = add_port<calcium_integer_port_provides>("CALCIUM_integer","provides","ETP_EN");
47           p1->setDependencyType(CalciumTypes::TIME_DEPENDENCY);
48           /* STP_EN  T       OUT     ENTIER */
49           add_port<calcium_integer_port_uses>("CALCIUM_integer","uses","STP_EN");
50           //end of initialization CALCIUM ports
51         }
52       catch(const PortAlreadyDefined& ex)
53         {
54           std::cerr << "DSCCODD: " << ex.what() << std::endl;
55           //Ports already created : we use them
56         }
57       catch ( ... ) 
58         {
59           std::cerr << "DSCCODD: unknown exception" << std::endl;
60         }
61
62       rtn = true;
63     }
64   if (s_name == "trun") 
65     {
66       try
67         {
68           std::cerr << "DSCCODD: trun: "  << std::endl;
69           calcium_real_port_provides * p1;
70           /* ETP_RE  T       IN      REEL   */
71           p1 = add_port<calcium_real_port_provides>("CALCIUM_real","provides","ETP_RE");
72           p1->setDependencyType(CalciumTypes::TIME_DEPENDENCY);
73           /* STP_RE  T       OUT     REEL   */
74           add_port<calcium_real_port_uses>("CALCIUM_real","uses","STP_RE");
75         }
76       catch(const PortAlreadyDefined& ex)
77         {
78           std::cerr << "DSCCODD: " << ex.what() << std::endl;
79           //Ports already created : we use them
80         }
81       catch ( ... ) 
82         {
83           std::cerr << "DSCCODD: unknown exception" << std::endl;
84         }
85       rtn = true;
86     }
87   return rtn;
88 }
89
90 void DSCCODD_i::prun(CORBA::Long niter)
91 {
92   cerr << "DSCCODD_i::prun" << endl;
93   Superv_Component_i * component = dynamic_cast<Superv_Component_i*>(this);
94   std::cerr << "Valeur de component : " << component << std::endl;
95   std::cerr << "Valeur de this : " << this << std::endl;
96   char       nom_instance[INSTANCE_LEN];
97   int   SDATA_EN [3]; // buffer
98   int   EDATA_EN [3]; // buffer
99
100   int info = cp_cd(component,nom_instance);
101
102   int  i = 0; // not used
103   float ti_re = 0.0; // step time
104   float tf_re = 1.0; // step start time
105   int max=3; // max size expected
106   int n; // real size received
107
108   info = cp_len(component,CP_TEMPS,&ti_re,&tf_re,&i,(char *)"ETP_EN",max,&n,EDATA_EN);
109
110   for (int i = 0; i < n; ++i)
111     {
112       SDATA_EN[i]=EDATA_EN[i]*2;
113       cerr << "seqLongData[" << i << "] = " << EDATA_EN[i] << endl;
114     }
115
116   info = cp_een(component,CP_TEMPS,ti_re,i,(char *)"STP_EN",n,SDATA_EN);
117   cerr << "end of DSCCODD_i::prun" << endl;
118 }
119
120 void DSCCODD_i::trun(CORBA::Long niter)
121 {
122   cerr << "DSCCODD_i::trun" << endl;
123   Superv_Component_i * component = dynamic_cast<Superv_Component_i*>(this);
124   char       nom_instance[INSTANCE_LEN];
125   int info = cp_cd(component,nom_instance);
126
127   float     SDATA_RE [3], EDATA_RE [3];
128
129   int  i = 0; // not used
130   float ti_re = 0.0; // time
131   int max=3; // max size expected
132   int n=2; // real size received
133   float tf_re = 1.0; // time
134
135   info = cp_lre(component,CP_TEMPS,&ti_re,&tf_re,&i,(char *)"ETP_RE",max,&n,EDATA_RE);
136
137   cerr << "apres cp_lre: " << n << endl;
138   for (int i = 0; i < n; ++i)
139     {
140       SDATA_RE[i]=EDATA_RE[i]*2;
141       cerr << "seqRealData[" << i << "] = " << EDATA_RE[i] << endl;
142     }
143
144   info = cp_ere(component,CP_TEMPS,ti_re,i,(char *)"STP_RE",n,SDATA_RE);
145   cerr << "end of DSCCODD_i::trun" << endl;
146 }
147
148 extern "C"
149 {
150   PortableServer::ObjectId * DSCCODDEngine_factory( CORBA::ORB_ptr orb, 
151                                                     PortableServer::POA_ptr poa, 
152                                                     PortableServer::ObjectId * contId,
153                                                     const char *instanceName, 
154                                                     const char *interfaceName)
155   {
156     MESSAGE("PortableServer::ObjectId * DSCCODDEngine_factory()");
157     DSCCODD_i * myEngine = new DSCCODD_i(orb, poa, contId, instanceName, interfaceName);
158     return myEngine->getId() ;
159   }
160 }