00001 #ifndef _QPID_CONSOLE_SESSION_MANAGER_H
00002 #define _QPID_CONSOLE_SESSION_MANAGER_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "qpid/console/ConsoleImportExport.h"
00026 #include "qpid/console/Broker.h"
00027 #include "qpid/console/Package.h"
00028 #include "qpid/console/SequenceManager.h"
00029 #include "qpid/console/ClassKey.h"
00030 #include "qpid/console/Schema.h"
00031 #include "qpid/console/Agent.h"
00032 #include "qpid/console/Object.h"
00033 #include "qpid/console/ObjectId.h"
00034 #include "qpid/console/Value.h"
00035 #include "qpid/sys/Mutex.h"
00036 #include "qpid/sys/Condition.h"
00037 #include "qpid/client/ConnectionSettings.h"
00038 #include <string>
00039 #include <vector>
00040
00041 namespace qpid {
00042 namespace console {
00043
00044 class ConsoleListener;
00045
00050 class SessionManager
00051 {
00052 public:
00053 typedef std::vector<std::string> NameVector;
00054 typedef std::vector<ClassKey> KeyVector;
00055 QPID_CONSOLE_EXTERN ~SessionManager();
00056
00057 struct Settings {
00058 bool rcvObjects;
00059 bool rcvEvents;
00060 bool rcvHeartbeats;
00061 bool userBindings;
00062 uint32_t methodTimeout;
00063 uint32_t getTimeout;
00064
00065 Settings() : rcvObjects(true), rcvEvents(true), rcvHeartbeats(true),
00066 userBindings(false), methodTimeout(20), getTimeout(20)
00067 {}
00068 };
00069
00084 QPID_CONSOLE_EXTERN SessionManager(ConsoleListener* listener = 0,
00085 Settings settings = Settings());
00086
00093 QPID_CONSOLE_EXTERN Broker* addBroker(client::ConnectionSettings& settings);
00094
00099 QPID_CONSOLE_EXTERN void delBroker(Broker* broker);
00100
00105 QPID_CONSOLE_EXTERN void getPackages(NameVector& packages);
00106
00112 QPID_CONSOLE_EXTERN void getClasses(KeyVector& classKeys,
00113 const std::string& packageName);
00114
00119 QPID_CONSOLE_EXTERN SchemaClass& getSchema(const ClassKey& classKey);
00120
00128 QPID_CONSOLE_EXTERN void bindPackage(const std::string& packageName);
00129
00137 QPID_CONSOLE_EXTERN void bindClass(const ClassKey& classKey);
00138 QPID_CONSOLE_EXTERN void bindClass(const std::string& packageName,
00139 const std::string& className);
00140
00147 QPID_CONSOLE_EXTERN void getAgents(Agent::Vector& agents,
00148 Broker* broker = 0);
00149
00160 QPID_CONSOLE_EXTERN void getObjects(Object::Vector& objects,
00161 const std::string& className,
00162 Broker* broker = 0,
00163 Agent* agent = 0);
00164
00165
00166
00167
00168
00169 private:
00170 friend class Broker;
00171 friend class Broker::ConnectionThread;
00172 friend class Object;
00173 sys::Mutex lock;
00174 sys::Mutex brokerListLock;
00175 ConsoleListener* listener;
00176 std::vector<Broker*> brokers;
00177 std::map<std::string, Package*> packages;
00178 SequenceManager sequenceManager;
00179 sys::Condition cv;
00180 SequenceManager::set syncSequenceList;
00181 Object::Vector getResult;
00182 std::string error;
00183 Settings settings;
00184 NameVector bindingKeyList;
00185
00186 void bindingKeys();
00187 void allBrokersStable();
00188 void startProtocol(Broker* broker);
00189 void handleBrokerResp(Broker* broker, framing::Buffer& inBuffer, uint32_t sequence);
00190 void handlePackageInd(Broker* broker, framing::Buffer& inBuffer, uint32_t sequence);
00191 void handleCommandComplete(Broker* broker, framing::Buffer& inBuffer, uint32_t sequence);
00192 void handleClassInd(Broker* broker, framing::Buffer& inBuffer, uint32_t sequence);
00193 void handleMethodResp(Broker* broker, framing::Buffer& inBuffer, uint32_t sequence);
00194 void handleHeartbeatInd(Broker* broker, framing::Buffer& inBuffer, uint32_t sequence);
00195 void handleEventInd(Broker* broker, framing::Buffer& inBuffer, uint32_t sequence);
00196 void handleSchemaResp(Broker* broker, framing::Buffer& inBuffer, uint32_t sequence);
00197 void handleContentInd(Broker* broker, framing::Buffer& inBuffer, uint32_t sequence, bool prop, bool stat);
00198 void handleBrokerConnect(Broker* broker);
00199 void handleBrokerDisconnect(Broker* broker);
00200
00201 };
00202
00203 }}
00204
00205 #endif