00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #ifndef _GLASS_HH_
00022 #define _GLASS_HH_
00023
00024 #include <boost/thread.hpp>
00025 #include <list>
00026 #include <map>
00027
00028 #include "types.h"
00029 #include "exception.h"
00030
00031 namespace libglass {
00032
00033 class PluginManager;
00034 class PluginInterface;
00035 class PluginBase;
00036 class Protocol;
00037 class Packet;
00038
00039
00040 #if defined(_MSC_VER)
00041
00042 LIBGLASS_IMP_TEMPLATE_STL_MAP(libglass::nodeFD, libglass::nodeId);
00043 LIBGLASS_IMP_TEMPLATE_STL_MAP(libglass::nodeId, libglass::nodeFD);
00044 LIBGLASS_IMP_TEMPLATE_STL_MAP(libglass::nodeId, libglass::nodeRelation);
00045 #endif // _MSC_VER
00046
00047 class LIBGLASS_API Glass {
00048
00049 protected:
00050
00051 friend class GlassManager;
00052 friend class PluginInterface;
00053 friend class PluginManager;
00054 friend class Protocol;
00055
00056 Protocol *protocol;
00057 nodeId id;
00058 PluginManager *pm;
00059 boost::thread::id pt_id;
00060 std::map<nodeFD, nodeId> fdtoidmap;
00061 std::map<nodeId, nodeFD> idtofdmap;
00062 std::map<nodeId, nodeRelation> idtorelation;
00081 void clean(void);
00082
00092 virtual bool processPacket(Packet &p, bool rootOnly = false);
00093
00102 virtual bool sendPacket(Packet &p);
00103
00111 virtual bool rootPacket(Packet &p) = 0;
00112
00120 PluginBase *getPlugin(PluginId id) const;
00121
00128 PluginManager *getPluginManager(void) const;
00129
00137 virtual nodeFD IdToFD(nodeId id);
00138
00146 virtual nodeId FDToId(nodeFD fd);
00147
00155 virtual nodeId registerNode(nodeFD fd) = 0;
00156
00169 virtual bool setNode(nodeFD fd, nodeId id, nodeRelation r,
00170 bool force = false);
00171
00181 virtual bool setRelation(nodeId id, nodeRelation r);
00182
00192 virtual bool unregisterNode(nodeId id);
00193
00198 virtual bool unregisterNode(nodeFD fd);
00199
00200 public:
00201 Glass(Protocol *p) throw(Exception);
00202 virtual ~Glass();
00203
00209 nodeId getNodeId(void) const;
00210
00219 nodeRelation getNodeRelation(nodeId id) const;
00220
00225 void setCurrent(void);
00226
00230 void lockCurrent(void);
00231
00235 void unlockCurrent(void);
00236
00257 virtual unsigned int getTotalNodes(void);
00258
00259 };
00260
00261 }
00262
00263 #endif // _GLASS_HH_