00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef HxServer_h
00010 #define HxServer_h
00011
00012 #include <OB/CORBA.h>
00013 #include "HxServerBase.h"
00014 #include "HxCorbaConversions.h"
00015 #include "HxNSBinding.h"
00016 #include <list>
00017
00018
00020 class HxServer : public HxServerBase
00021 {
00022 public:
00024 HxServer(int argc, char* argv[]);
00025
00027 HxServer(int port);
00028
00030 virtual ~HxServer();
00031
00033 static HxServer* instance();
00034
00035 virtual void run();
00036 virtual void message(const char* msg);
00037 void shutdown(bool wait_for_completion = false);
00038
00039 void bindToNameServer(const char* name,
00040 const char* nsAddress);
00041
00042 CORBA::Object_ptr getInitialObject(const char* name);
00043 void addInitialObject(const char* name,
00044 PortableServer::Servant servant);
00045
00046 char* object_to_string(CORBA::Object_ptr obj);
00047 CORBA::Object_ptr string_to_object(const char* ref);
00048
00049 PortableServer::POA_ptr getDataPOA();
00050 PortableServer::POA_ptr getRootPOA();
00051 PortableServer::POA_ptr getCurrentPOA();
00052 PortableServer::Servant getCurrentServant();
00053 PortableServer::ObjectId* getCurrentObjectId();
00054
00055 virtual CORBA::Object_ptr registerServant(PortableServer::Servant srv);
00056 virtual void unregisterServant(
00057 const PortableServer::ObjectId& oid);
00058 virtual PortableServer::Servant getServant(CORBA::Object_ptr obj);
00059
00060 virtual HxCorba::RgbBuffer_ptr createRgbBuffer();
00061 virtual void setRgbBufferArray(HxCorba::RgbBuffer_ptr buf,
00062 int* array);
00063
00064 protected:
00065 void init(int argc, char* argv[]);
00066
00067 CORBA::ORB_ptr _orb;
00068 PortableServer::POA_var _rootPOA;
00069 PortableServer::POA_var _dataPOA;
00070 PortableServer::POA_var _initialPOA;
00071 OB::BootManager_var _bootMgr;
00072
00073 PortableServer::Current_var _poaCurrent;
00074
00075 std::list<HxNSBinding*> _nsBindings;
00076
00077 private:
00078 static HxServer* _inst;
00079 int _silent;
00080 };
00081
00082
00083 template<class TiedSvtT>
00084 inline typename TiedSvtT::HxT&
00085 HxGetTiedObject(typename TiedSvtT::CorbaT* obj, typename TiedSvtT::HxT& empty)
00086 {
00087 return HxGetTiedObject<TiedSvtT>(HxServer::instance(), obj, empty);
00088 }
00089
00090 template<class TiedSvtT>
00091 inline typename TiedSvtT::HxT&
00092 HxGetTiedObject(typename TiedSvtT::CorbaT* obj)
00093 {
00094 static typename TiedSvtT::HxT temp;
00095 temp = typename TiedSvtT::HxT();
00096 return HxGetTiedObject<TiedSvtT>(HxServer::instance(), obj, temp);
00097
00098 }
00099
00100 template<class TiedSvtT>
00101 inline typename TiedSvtT::CorbaT*
00102 HxRegisterTiedServant(const typename TiedSvtT::HxT& obj)
00103 {
00104 return HxRegisterTiedServant<TiedSvtT>(HxServer::instance(), obj);
00105 }
00106
00107 template<class TiedSvtT, class SrcListT>
00108 inline typename TiedSvtT::SeqT*
00109 HxMakeTiedServantsList(SrcListT& lst)
00110 {
00111 return HxMakeTiedServantsList<TiedSvtT, SrcListT>(HxServer::instance(), lst);
00112 }
00113
00114 template<class CorbaSeqT, class SrcListT>
00115 inline CorbaSeqT*
00116 HxMakeBasicList(SrcListT& lst)
00117 {
00118 return HxMakeBasicList<CorbaSeqT, SrcListT>(HxServer::instance(), lst);
00119 }
00120
00121 template<class CorbaSeqT, class SrcListT>
00122 inline CorbaSeqT*
00123 HxMakeStringList(SrcListT& lst)
00124 {
00125 return HxMakeStringList<CorbaSeqT, SrcListT>(HxServer::instance(), lst);
00126 }
00127
00128 template<class TiedSvtT, class DstListT>
00129 inline DstListT
00130 HxGetTiedObjectList(const typename TiedSvtT::SeqT& seq)
00131 {
00132 return HxGetTiedObjectList<TiedSvtT, DstListT>(HxServer::instance(), seq);
00133 }
00134
00135 #endif