Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038 #ifndef ORO_CORBA_CONTROLTASK_PROXY_HPP
00039 #define ORO_CORBA_CONTROLTASK_PROXY_HPP
00040
00041
00042 #ifndef _REENTRANT
00043 #define _REENTRANT
00044 #endif
00045 #include "corba.h"
00046 #ifdef CORBA_IS_TAO
00047 #include "corba.h"
00048 #else
00049 #include <omniORB4/CORBA.h>
00050 #endif
00051
00052 #include <exception>
00053 #include "../../TaskContext.hpp"
00054 #include <string>
00055 #include <map>
00056 #include "TaskContextC.h"
00057 #include "ApplicationServer.hpp"
00058 #include <list>
00059
00060 namespace RTT
00061 {namespace corba
00062 {
00066 struct IllegalServer
00067 : public std::exception
00068 {
00069 std::string reason;
00070 IllegalServer();
00071 IllegalServer(const std::string& reason);
00072 ~IllegalServer() throw();
00073 const char* what() const throw();
00074 };
00075
00082 class RTT_CORBA_API TaskContextProxy
00083 : public TaskContext,
00084 public ApplicationServer
00085 {
00086 public:
00087 typedef std::map<TaskContextProxy*, corba::CTaskContext_ptr> PMap;
00088 static PMap proxies;
00089
00090 protected:
00095 TaskContextProxy(std::string location, bool is_ior);
00096
00101 TaskContextProxy( ::RTT::corba::CTaskContext_ptr t );
00102
00109 std::list<base::PortInterface*> port_proxies;
00110
00111 void synchronize();
00112
00113 mutable corba::CTaskContext_var mtask;
00114
00118 static PortableServer::POA_var proxy_poa;
00119
00120 void fetchRequesters(ServiceRequester::shared_ptr parent, CServiceRequester_ptr csrq);
00121 void fetchServices(Service::shared_ptr parent, CService_ptr mtask);
00122 void fetchPorts(Service::shared_ptr parent, CDataFlowInterface_ptr serv);
00123 public:
00124 ~TaskContextProxy();
00125
00129 static void DestroyOrb();
00130
00138 static TaskContextProxy* Create(std::string name, bool is_ior = false);
00139
00146 static TaskContextProxy* CreateFromFile(std::string filename);
00147
00157 static TaskContext* Create(::RTT::corba::CTaskContext_ptr task, bool force_remote = false);
00158
00166 corba::CTaskContext_ptr server() const;
00167
00168 virtual bool activate();
00169
00170 virtual bool start();
00171
00172 virtual bool stop();
00173
00174 virtual bool isRunning() const;
00175
00176 virtual bool configure();
00177
00178 virtual bool cleanup();
00179
00180 virtual bool isActive() const;
00181
00182 virtual bool isConfigured() const;
00183
00184 virtual bool inFatalError() const;
00185
00186 virtual bool inRunTimeError() const;
00187
00188 virtual TaskState getTaskState() const;
00189
00190 virtual void setName(const std::string& n);
00191
00192 virtual bool addPeer( TaskContext* peer, std::string alias = "" );
00193
00194 virtual void removePeer( const std::string& name );
00195
00196 virtual void removePeer( TaskContext* peer );
00197
00198 virtual bool connectPeers( TaskContext* peer );
00199
00200 virtual void disconnectPeers( const std::string& name );
00201
00202 virtual PeerList getPeerList() const;
00203
00204 virtual bool hasPeer( const std::string& peer_name ) const;
00205
00206 virtual TaskContext* getPeer(const std::string& peer_name ) const;
00207
00208 virtual bool connectPorts( TaskContext* peer );
00209
00210 virtual bool connectServices( TaskContext* peer );
00211
00212 virtual bool ready();
00216 static PortableServer::POA_ptr ProxyPOA();
00217 };
00218 }}
00219 #endif