From cb566519d58ded6704507fa5530bf901e620edf6 Mon Sep 17 00:00:00 2001 From: Alan Conway Date: Thu, 19 Jul 2007 21:52:24 +0000 Subject: * Summary: - Connect cluster handlers into broker handler chains. - Progress on wiring replication. * src/tests/cluster.mk: Temporarily disabled Cluster test. * src/tests/Cluster.h, cpp, Cluster_child.cpp: Updated to use UUIDs. * src/qpidd.cpp: - Load optional libs (cluster) - Include plugin config in options.parse. * src/qpid/cluster/SessionManager.h: - Create sessions, update handler chains (as HandlerUpdater) - Handle frames from cluster. * src/qpid/cluster/ClusterPlugin.h, .cpp: - renamed from ClusterPluginProvider - Create and connect Cluster and SessionManager. - Register SessionManager as HandlerUpdater. * src/qpid/cluster/Cluster.h, .cpp: Refactor as SessionFrameHandler. * src/qpid/broker/Connection.cpp: Apply HandlerUpdaters. * src/qpid/broker/Broker.h, .cpp: - Initialize plugins - Apply HandlerUpdaters * src/qpid/Plugin.h, .cpp: Simplified plugin framework. git-svn-id: https://svn.apache.org/repos/asf/incubator/qpid/trunk/qpid@557788 13f79535-47bb-0310-9956-ffa450edef68 --- cpp/src/qpid/cluster/SessionManager.h | 68 +++++++++++++++++++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 cpp/src/qpid/cluster/SessionManager.h (limited to 'cpp/src/qpid/cluster/SessionManager.h') diff --git a/cpp/src/qpid/cluster/SessionManager.h b/cpp/src/qpid/cluster/SessionManager.h new file mode 100644 index 0000000000..c23efde18e --- /dev/null +++ b/cpp/src/qpid/cluster/SessionManager.h @@ -0,0 +1,68 @@ +#ifndef QPID_CLUSTER_SESSIONMANAGER_H +#define QPID_CLUSTER_SESSIONMANAGER_H + +/* + * + * Copyright (c) 2006 The Apache Software Foundation + * + * Licensed 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 "qpid/broker/BrokerChannel.h" +#include "qpid/cluster/SessionFrame.h" +#include "qpid/framing/HandlerUpdater.h" +#include "qpid/framing/Uuid.h" +#include "qpid/sys/Mutex.h" + +#include + +namespace qpid { +namespace cluster { + +/** + * Manage sessions and handler chains for the cluster. + * + */ +class SessionManager : public framing::HandlerUpdater, public SessionFrameHandler +{ + public: + SessionManager(); + + /** Set the handler to send to the cluster */ + void setClusterSend(const SessionFrameHandler::Chain& send) { clusterSend=send; } + + /** As ChannelUpdater update the handler chains. */ + void update(framing::FrameHandler::Chains& chains); + + /** As SessionFrameHandler handle frames received from the cluster */ + void handle(SessionFrame&); + + /** Get ChannelID for UUID. Return 0 if no mapping */ + framing::ChannelId getChannelId(const framing::Uuid&) const; + + private: + typedef std::map SessionMap; + + sys::Mutex lock; + SessionFrameHandler::Chain clusterSend; + SessionMap sessions; + framing::FrameHandler::Chains nonLocal; +}; + + +}} // namespace qpid::cluster + + + +#endif /*!QPID_CLUSTER_CHANNELMANAGER_H*/ -- cgit v1.2.1