Apache Qpid - AMQP Messaging for Java JMS, C++, Python, Ruby, and .NET Apache Qpid Documentation
qpid/console/SessionManager.h
Go to the documentation of this file.
00001 #ifndef _QPID_CONSOLE_SESSION_MANAGER_H
00002 #define _QPID_CONSOLE_SESSION_MANAGER_H
00003 
00004 /*
00005  *
00006  * Licensed to the Apache Software Foundation (ASF) under one
00007  * or more contributor license agreements.  See the NOTICE file
00008  * distributed with this work for additional information
00009  * regarding copyright ownership.  The ASF licenses this file
00010  * to you under the Apache License, Version 2.0 (the
00011  * "License"); you may not use this file except in compliance
00012  * with the License.  You may obtain a copy of the License at
00013  *
00014  *   http://www.apache.org/licenses/LICENSE-2.0
00015  *
00016  * Unless required by applicable law or agreed to in writing,
00017  * software distributed under the License is distributed on an
00018  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
00019  * KIND, either express or implied.  See the License for the
00020  * specific language governing permissions and limitations
00021  * under the License.
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 
00150     QPID_CONSOLE_EXTERN void bindEvent(const ClassKey& classKey);
00151     QPID_CONSOLE_EXTERN void bindEvent(const std::string& packageName,
00152                                        const std::string& eventName="");
00153 
00154 
00161     QPID_CONSOLE_EXTERN void getAgents(Agent::Vector& agents,
00162                                        Broker* broker = 0);
00163 
00174     QPID_CONSOLE_EXTERN void getObjects(Object::Vector& objects,
00175                                         const std::string& className,
00176                                         Broker* broker = 0,
00177                                         Agent* agent = 0);
00178     //void getObjects(Object::Vector& objects, const ClassKey& classKey,
00179     //                Broker* broker = 0, Agent* agent = 0);
00180     //void getObjects(Object::Vector& objects, const ObjectId& objectId,
00181     //                Broker* broker = 0, Agent* agent = 0);
00182 
00183 private:
00184     friend class Broker;
00185     friend class Broker::ConnectionThread;
00186     friend class Object;
00187     sys::Mutex lock;
00188     sys::Mutex brokerListLock;
00189     ConsoleListener* listener;
00190     std::vector<Broker*> brokers;
00191     std::map<std::string, Package*> packages;
00192     SequenceManager sequenceManager;
00193     sys::Condition cv;
00194     SequenceManager::set syncSequenceList;
00195     Object::Vector getResult;
00196     std::string error;
00197     Settings settings;
00198     NameVector bindingKeyList;
00199 
00200     void bindingKeys();
00201     void allBrokersStable();
00202     void startProtocol(Broker* broker);
00203     void handleBrokerResp(Broker* broker, framing::Buffer& inBuffer, uint32_t sequence);
00204     void handlePackageInd(Broker* broker, framing::Buffer& inBuffer, uint32_t sequence);
00205     void handleCommandComplete(Broker* broker, framing::Buffer& inBuffer, uint32_t sequence);
00206     void handleClassInd(Broker* broker, framing::Buffer& inBuffer, uint32_t sequence);
00207     void handleMethodResp(Broker* broker, framing::Buffer& inBuffer, uint32_t sequence);
00208     void handleHeartbeatInd(Broker* broker, framing::Buffer& inBuffer, uint32_t sequence);
00209     void handleEventInd(Broker* broker, framing::Buffer& inBuffer, uint32_t sequence);
00210     void handleSchemaResp(Broker* broker, framing::Buffer& inBuffer, uint32_t sequence);
00211     void handleContentInd(Broker* broker, framing::Buffer& inBuffer, uint32_t sequence, bool prop, bool stat);
00212     void handleBrokerConnect(Broker* broker);
00213     void handleBrokerDisconnect(Broker* broker);
00214 
00215 };
00216 
00217 }} // namespace qpid::console
00218 
00219 #endif  

Qpid C++ API Reference
Generated on Mon Aug 22 2011 for Qpid C++ Client API by doxygen 1.7.4