Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

/ps/src/dsc/co/mw/mwfwk/cmwfwForwarder.cc

Go to the documentation of this file.
00001 #include "cmwfwList.h"
00002 #include "cmwfwTime.h"
00003 #include "cmwfwTypes.h"
00004 #include "cmwfw_defs.h"
00005 #include "cmwfwIOValue.h"
00006 #include "cmwfwForwarder.h"
00007 #include "cmwfwIOPMapper.h"
00008 #include "cmwfwDeviceServer.h"
00009 #include "cmwfwSubscribtionManager.h"
00010 
00011 extern cmwfwIOPMapper framework_iop_mapper;
00012 
00013 
00014 #define FILE "source file:cmwfwForwarder.cc"
00015 #define ID "Contact Steen JENSEN, PS/CO"
00016 #define PROGRAM "Middleware server framework"
00017 #define T(a,b,c,d,e) TRACE(a,"%s(%s): %s %s %s %s\n",myname,FILE,b,c,d,e)
00018 #define E(a,b,c,d) ERROR("%s:%s(%s):ERROR: %s %s %s %s - %s\n",PROGRAM,myname,FILE,a,b,c,d,ID)
00019 
00020 
00030 cmwfwForwarder::cmwfwForwarder(){
00031   char* myname = "cmwfwForwarder::cmwfwForwarder";
00032   T(CMWFW_TRACE_CALLS,"Entering","","","");
00033   T(CMWFW_TRACE_SERVER,"Constructing forwarder","","","");
00034   T(CMWFW_TRACE_CALLS,"Returning - all ok","","","");
00035 };
00036 
00037 
00038 
00048 cmwfwForwarder::~cmwfwForwarder(){
00049   char* myname = "cmwfwForwarder::~cmwfwForwarder";
00050   T(CMWFW_TRACE_CALLS,"Entering","","","");
00051   T(CMWFW_TRACE_SERVER,"Destroying forwarder","","","");
00052   T(CMWFW_TRACE_CALLS,"Returning - all ok","","","");
00053 };
00054 
00055 
00056 
00067 void cmwfwForwarder::processIOP(const cmwfwIOPoint& iop,
00068                                                                 const cmwfwData& data,
00069                                                                 const cmwfwValueQualifier& qualifier){
00070   char* myname = "cmwfwForwarder::processIOP";
00071   T(CMWFW_TRACE_CALLS,"Entering","","","");
00072 
00073   cmwfwDeviceServer*   srv           = framework_iop_mapper.getServer(iop);
00074   cmwfwIOValue*        iov_ptr       = 0;
00075 
00076   
00077   if(!srv){
00078         char errmess[50] = "cmwfwForwarder::processIOP - no server for ";
00079         strcat(errmess,iop.getDeviceName());
00080     E("No server found","","","");
00081         throw cmwfwBadParameter("no server  specified");
00082     T(CMWFW_TRACE_CALLS,"Returning - no server","","","");
00083     return;
00084   };
00085 
00086   srv->iovalues->lock();
00087   iov_ptr = srv->getIOValue(iop,false);
00088   if(iov_ptr)
00089     iov_ptr->update(data,qualifier);
00090   else{
00091     E("Unable to retrieve iopoint from server","","","");
00092         //This is an error since any iopoint subscribed here should also
00093         //be subscribed in the server
00094     T(CMWFW_TRACE_CALLS,"Returning - no iovalue","","","");
00095   };
00096   srv->iovalues->unlock();
00097   T(CMWFW_TRACE_CALLS,"Returning - all ok","","","");
00098 };
00099 
00100 
00101 
00102 
00114 void cmwfwForwarder::push(const cmwfwIOPoint& iop,
00115                                                   cmwfwData& data,
00116                                                   const cmwfwValueQualifier& qualifier){
00117   char* myname = "cmwfwForwarder::push";
00118   T(CMWFW_TRACE_CALLS,"Entering","","","");
00119 
00120 //  if(!data.contains(TIMESTAMP_TAG))
00121 //    data.insert(TIMESTAMP_TAG,cmwfwGetCurrentTime());
00122   processIOP(iop,data,qualifier);
00123 
00124   T(CMWFW_TRACE_CALLS,"Returning - all ok","","","");
00125 };
00126 
00127 
00128 
00129 
00140 void cmwfwForwarder::push(cmwfwData& data,
00141                                                   const cmwfwValueQualifier& qualifier){
00142 
00143   char* myname = "cmwfwForwarder::push";
00144   T(CMWFW_TRACE_CALLS,"Entering","","","");
00145 
00146   bool stat = false;
00147   cmwfwIOPoint* iop_ptr = 0;
00148 //  if(!data.contains(TIMESTAMP_TAG))
00149 //    data.insert(TIMESTAMP_TAG,cmwfwGetCurrentTime());
00150 
00151   iopoints->lock();
00152 
00153   iopoints->resetCurrent(false);
00154   stat = iopoints->getCurrent(&iop_ptr,false);
00155   if(stat)
00156     processIOP(*iop_ptr,data,qualifier);
00157   else{//No iopoints found
00158     iopoints->unlock();
00159     T(CMWFW_TRACE_CALLS,"Returning - no iopoint","","","");
00160         return;
00161   };
00162 
00163   while(stat){
00164         stat = iopoints->getNext(&iop_ptr,false);
00165     if(stat)
00166       processIOP(*iop_ptr,data,qualifier);
00167     else{//no more iopoints found
00168           iopoints->unlock();
00169           T(CMWFW_TRACE_CALLS,"Returning - all ok","","","");
00170       return;
00171     };
00172   };
00173   iopoints->unlock();
00174   T(CMWFW_TRACE_CALLS,"Returning - all ok","","","");
00175   return;
00176 };
00177 
00178 
00179 

Generated at Thu May 10 11:28:58 2001 for C.E.R.N.-PSControlsMiddlewareFramework by doxygen1.2.6 written by Dimitri van Heesch, © 1997-2001