#ifndef _QmfEngineConsoleEngineImpl_ #define _QmfEngineConsoleEngineImpl_ /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ #include "qmf/engine/Console.h" #include "qmf/engine/MessageImpl.h" #include "qmf/engine/SchemaImpl.h" #include "qmf/engine/Typecode.h" #include "qmf/engine/ObjectImpl.h" #include "qmf/engine/ObjectIdImpl.h" #include "qmf/engine/QueryImpl.h" #include "qmf/engine/ValueImpl.h" #include "qmf/engine/Protocol.h" #include "qmf/engine/SequenceManager.h" #include "qmf/engine/BrokerProxyImpl.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace qmf { namespace engine { struct ConsoleEventImpl { typedef boost::shared_ptr Ptr; ConsoleEvent::EventKind kind; boost::shared_ptr agent; std::string name; const SchemaClassKey* classKey; boost::shared_ptr object; void* context; Event* event; uint64_t timestamp; bool hasProps; bool hasStats; ConsoleEventImpl(ConsoleEvent::EventKind k) : kind(k), classKey(0), context(0), event(0), timestamp(0) {} ~ConsoleEventImpl() {} ConsoleEvent copy(); }; class ConsoleImpl : public boost::noncopyable { public: ConsoleImpl(const ConsoleSettings& settings = ConsoleSettings()); ~ConsoleImpl(); bool getEvent(ConsoleEvent& event) const; void popEvent(); void addConnection(BrokerProxy& broker, void* context); void delConnection(BrokerProxy& broker); uint32_t packageCount() const; const std::string& getPackageName(uint32_t idx) const; uint32_t classCount(const char* packageName) const; const SchemaClassKey* getClass(const char* packageName, uint32_t idx) const; ClassKind getClassKind(const SchemaClassKey* key) const; const SchemaObjectClass* getObjectClass(const SchemaClassKey* key) const; const SchemaEventClass* getEventClass(const SchemaClassKey* key) const; void bindPackage(const char* packageName); void bindClass(const SchemaClassKey* key); void bindClass(const char* packageName, const char* className); /* void startSync(const Query& query, void* context, SyncQuery& sync); void touchSync(SyncQuery& sync); void endSync(SyncQuery& sync); */ private: friend class BrokerProxyImpl; friend struct StaticContext; const ConsoleSettings& settings; mutable qpid::sys::Mutex lock; std::deque eventQueue; std::vector brokerList; std::vector > bindingList; // exchange/key (empty exchange => QMF_EXCHANGE) // Declare a compare class for the class maps that compares the dereferenced // class key pointers. The default behavior would be to compare the pointer // addresses themselves. struct KeyCompare { bool operator()(const SchemaClassKey* left, const SchemaClassKey* right) const { return *left < *right; } }; typedef std::map ObjectClassList; typedef std::map EventClassList; typedef std::map > PackageList; PackageList packages; void learnPackage(const std::string& packageName); void learnClass(SchemaObjectClass* cls); void learnClass(SchemaEventClass* cls); bool haveClass(const SchemaClassKey* key) const; SchemaObjectClass* getSchema(const SchemaClassKey* key) const; void eventAgentAdded(boost::shared_ptr agent); void eventAgentDeleted(boost::shared_ptr agent); void eventNewPackage(const std::string& packageName); void eventNewClass(const SchemaClassKey* key); void eventObjectUpdate(ObjectPtr object, bool prop, bool stat); void eventAgentHeartbeat(boost::shared_ptr agent, uint64_t timestamp); }; } } #endif