[asterisk-scf-commits] asterisk-scf/integration/routing.git branch "smart-proxy" updated.

Commits to the Asterisk SCF project code repositories asterisk-scf-commits at lists.digium.com
Fri Dec 3 13:35:16 CST 2010


branch "smart-proxy" has been updated
       via  a5a2987c5fbbb78bca98f2cc4c7f94e99d332fdc (commit)
      from  e971cf16fcd669f6fbec5b48ff2c36aca9e1ad6a (commit)

Summary of changes:
 src/BasicRoutingServiceApp.cpp |   16 +++--
 src/BridgeManagerAccessor.cpp  |  134 ----------------------------------------
 src/BridgeManagerAccessor.h    |   48 --------------
 src/CMakeLists.txt             |    4 +-
 src/SessionRouter.cpp          |   38 ++++++++----
 src/SessionRouter.h            |    6 +-
 6 files changed, 40 insertions(+), 206 deletions(-)
 delete mode 100644 src/BridgeManagerAccessor.cpp
 delete mode 100644 src/BridgeManagerAccessor.h


- Log -----------------------------------------------------------------
commit a5a2987c5fbbb78bca98f2cc4c7f94e99d332fdc
Author: David M. Lee <dlee at digium.com>
Date:   Fri Dec 3 13:35:12 2010 -0600

    BridgeManagerAccessor -> SmartProxy.

diff --git a/src/BasicRoutingServiceApp.cpp b/src/BasicRoutingServiceApp.cpp
index 6b2684e..3920cc2 100644
--- a/src/BasicRoutingServiceApp.cpp
+++ b/src/BasicRoutingServiceApp.cpp
@@ -19,6 +19,7 @@
 #include <boost/thread.hpp>
 #include <boost/shared_ptr.hpp>
 
+#include "SmartProxy.h"
 #include "Core/Routing/RoutingIf.h"
 #include "Core/Discovery/ServiceLocatorIf.h"
 #include "SessionCommunications/SessionCommunicationsIf.h"
@@ -39,6 +40,7 @@ using namespace AsteriskSCF::Core::Routing::V1;
 using namespace AsteriskSCF::Core::Discovery::V1;
 using namespace AsteriskSCF::System::Component::V1;
 using namespace AsteriskSCF::System::Logging;
+using namespace AsteriskSCF::SmartProxy;
 
 namespace
 {
@@ -66,7 +68,6 @@ public:
         mAdminInteface = 0;
         mComponentService = 0;
         mEndpointRegistry = 0;
-        mBridgeManagerAccessor.reset();
         mEventPublisher = 0;
         // XXX unnecessary.
     }
@@ -101,7 +102,7 @@ private:
     BasicSessionRouterPtr mSessionRouter;
     RoutingServiceAdminPtr mAdminInteface;
     ComponentServicePtr mComponentService;
-    BridgeManagerAccessorPtr mBridgeManagerAccessor;
+    AsteriskSCF::SmartProxy::SmartProxy<BridgeManagerPrx> mBridgeManager;
     RoutingEventsPtr mEventPublisher;
     EndpointRegistryPtr mEndpointRegistry;
 
@@ -285,12 +286,13 @@ void BasicRoutingServiceApp::initialize()
         lg(Error) << "Problems in " << mAppName << " initialization(): " << exception.what();
     }
 
+    mBridgeManager = AsteriskSCF::SmartProxy::SmartProxy<BridgeManagerPrx>(
+        mServiceLocator,
+        new ServiceLocatorParams(BridgeServiceDiscoveryCategory),
+        lg);
+    mSessionRouter->setBridgeManager(mBridgeManager);
 
-    BridgeManagerAccessorPtr ptr(new BridgeManagerAccessor(mServiceLocator));
-    mBridgeManagerAccessor = ptr;
-    mSessionRouter->setBridgeManagerAccessor(mBridgeManagerAccessor);
-
-    if (!mBridgeManagerAccessor->isInitialized())
+    if (!mBridgeManager.isInitialized())
     {
         lg(Debug) << "Probabaly safe to ignore ServiceNotFound during startup. Will attempt to locate Bridge Service again when it is needed.";
     }
diff --git a/src/BridgeManagerAccessor.cpp b/src/BridgeManagerAccessor.cpp
deleted file mode 100644
index ab85026..0000000
--- a/src/BridgeManagerAccessor.cpp
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Asterisk SCF -- An open-source communications framework.
- *
- * Copyright (C) 2010, Digium, Inc.
- *
- * See http://www.asterisk.org for more information about
- * the Asterisk SCF project. Please do not directly contact
- * any of the maintainers of this project for assistance;
- * the project provides a web site, mailing lists and IRC
- * channels for your use.
- *
- * This program is free software, distributed under the terms of
- * the GNU General Public License Version 2. See the LICENSE.txt file
- * at the top of the source tree.
- */
-#include <Ice/Ice.h>
-#include <IceStorm/IceStorm.h>
-
-#include "Core/Discovery/ServiceLocatorIf.h"
-#include "SessionCommunications/SessionCommunicationsIf.h"
-#include "BridgeManagerAccessor.h"
-
-using namespace std;
-using namespace AsteriskSCF::Core::Discovery::V1;
-using namespace AsteriskSCF::SessionCommunications::V1;
-
-namespace AsteriskSCF
-{
-namespace BasicRoutingService
-{
-
-/**
- * The private implementation of BridgeManagerAccessor.
- */
-class BridgeManagerAccessorPriv
-{
-public:
-    BridgeManagerAccessorPriv(const ServiceLocatorPrx& locator) :
-        mServiceLocator(locator), mInitialized(false)
-    {
-        initialize();
-    }
-
-    /**
-     * Initialization. Primarily involves acquring access to specific IceStorm topic.
-     */
-    void initialize()
-    {
-        try
-        {
-            // Use the locator to find the BridgeManger.
-            ServiceLocatorParamsPtr nameparam = new ServiceLocatorParams;
-            nameparam->category = BridgeServiceDiscoveryCategory;
-            Ice::ObjectPrx bridgeManagerObject = mServiceLocator->locate(nameparam);
-            mBridgeManager = BridgeManagerPrx::checkedCast(bridgeManagerObject);
-        }
-        catch(const Ice::Exception &e)
-        {
-            cout << "Exception locating " << BridgeServiceDiscoveryCategory << ": " << e.what() << endl;
-            return;
-        }
-
-        if (mBridgeManager == 0)
-        {
-            cout << "Unable to locate " << BridgeServiceDiscoveryCategory << endl;
-        }
-
-        mInitialized = true;
-    }
-
-    /**
-     * Utiltity to check for initialization state.
-     */
-    bool verifyInitialized()
-    {
-        if (mInitialized)
-        {
-            return true;
-        }
-
-        // Try again to initialize.
-        initialize();
-
-        if (!mInitialized)
-        {
-            // TBD...Logging
-            cerr << "Routing Service can't locate BridgeManager at this time." << endl;
-        }
-
-        return mInitialized;
-    }
-
-    bool isInitialized()
-    {
-        return mInitialized;
-    }
-
-public:
-    BridgeManagerPrx mBridgeManager;
-
-private:
-    ServiceLocatorPrx mServiceLocator;
-    bool mInitialized;
-};
-
-/**
- * Class constructor.
- */
-BridgeManagerAccessor::BridgeManagerAccessor(const ServiceLocatorPrx& locator) :
-    mImpl(new BridgeManagerAccessorPriv(locator))
-{
-}
-
-/**
- * Provide acess to the actual proxy.
- */
-const BridgeManagerPrx& BridgeManagerAccessor::getBridgeManager() const
-{
-    if (!mImpl->verifyInitialized())
-    {
-        throw "No access to BridgeManager.";
-    }
-
-    return mImpl->mBridgeManager;
-}
-
-bool BridgeManagerAccessor::isInitialized()
-{
-    return mImpl->isInitialized();
-}
-
-} // end BasicRoutingService
-} // end AsteriskSCF
-
diff --git a/src/BridgeManagerAccessor.h b/src/BridgeManagerAccessor.h
deleted file mode 100644
index 0892930..0000000
--- a/src/BridgeManagerAccessor.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Asterisk SCF -- An open-source communications framework.
- *
- * Copyright (C) 2010, Digium, Inc.
- *
- * See http://www.asterisk.org for more information about
- * the Asterisk SCF project. Please do not directly contact
- * any of the maintainers of this project for assistance;
- * the project provides a web site, mailing lists and IRC
- * channels for your use.
- *
- * This program is free software, distributed under the terms of
- * the GNU General Public License Version 2. See the LICENSE.txt file
- * at the top of the source tree.
- */
-#pragma once
-
-#include <Ice/Ice.h>
-#include <boost/shared_ptr.hpp>
-
-#include "Core/Discovery/ServiceLocatorIf.h"
-#include "SessionCommunications/SessionCommunicationsIf.h"
-
-namespace AsteriskSCF
-{
-namespace BasicRoutingService
-{
-class BridgeManagerAccessorPriv;
-
-/**
- * A wrapper for the Bridge Manager proxy.
- */
-class BridgeManagerAccessor
-{
-public:
-    BridgeManagerAccessor(const AsteriskSCF::Core::Discovery::V1::ServiceLocatorPrx& locator);
-
-    const SessionCommunications::V1::BridgeManagerPrx& getBridgeManager() const;
-    bool isInitialized();
-
-private:
-    boost::shared_ptr<BridgeManagerAccessorPriv> mImpl; // pimpl idiom applied.
-};
-
-typedef boost::shared_ptr<BridgeManagerAccessor> BridgeManagerAccessorPtr;
-
-} // end BasicRoutingService
-} // end AsteriskSCF
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 0a3f840..0d8cbfc 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -19,8 +19,6 @@ asterisk_scf_component_add_file(BasicRoutingService LuaScriptProcessor.cpp)
 asterisk_scf_component_add_file(BasicRoutingService LuaScriptProcessor.h)
 asterisk_scf_component_add_file(BasicRoutingService RoutingServiceEventPublisher.cpp)
 asterisk_scf_component_add_file(BasicRoutingService RoutingServiceEventPublisher.h)
-asterisk_scf_component_add_file(BasicRoutingService BridgeManagerAccessor.cpp)
-asterisk_scf_component_add_file(BasicRoutingService BridgeManagerAccessor.h)
 
 asterisk_scf_component_add_ice_libraries(BasicRoutingService IceStorm)
 asterisk_scf_component_add_boost_libraries(BasicRoutingService thread core regex)
@@ -31,6 +29,8 @@ endif()
 include_directories(${logger_dir}/common)
 include_directories(${logger_dir}/client/src)
 
+include_directories(${utils_dir}/SmartProxy/src)
+
 asterisk_scf_component_build_icebox(BasicRoutingService)
 target_link_libraries(BasicRoutingService ${LUA_LIBRARIES})
 target_link_libraries(BasicRoutingService logging-client)
diff --git a/src/SessionRouter.cpp b/src/SessionRouter.cpp
index ce6a266..26b54ad 100644
--- a/src/SessionRouter.cpp
+++ b/src/SessionRouter.cpp
@@ -21,7 +21,6 @@
 #include "RoutingIf.h"
 #include "EndpointIf.h"
 #include "logger.h"
-#include "BridgeManagerAccessor.h"
 
 using namespace AsteriskSCF::Core::Routing::V1;
 using namespace AsteriskSCF::Core::Endpoint::V1;
@@ -393,15 +392,16 @@ public:
     }
 
     /**
-     * Set the accessor to the bridge. 
+     * Set the accessor to the bridge.
      */
-    void setBridgeAccessor(BridgeManagerAccessorPtr bridgeAccessor)
+    void setBridgeAccessor(const AsteriskSCF::SmartProxy::SmartProxy<
+            SessionCommunications::V1::BridgeManagerPrx>&  bridgeAccessor)
     {
-        mBridgeManagerAccessor = bridgeAccessor;
+        mBridgeManager = bridgeAccessor;
     }
 
     /**
-     * Do a lookup of the requested endpoint. 
+     * Do a lookup of the requested endpoint.
      */
     EndpointSeq lookupEndpoints(const std::string& destination, const Ice::Current& current)
     {
@@ -587,7 +587,8 @@ public:
     Ice::ObjectAdapterPtr mAdapter;
     EndpointRegistryPtr mEndpointRegistry;
     RoutingEventsPtr mEventPublisher;
-    BridgeManagerAccessorPtr mBridgeManagerAccessor;
+    AsteriskSCF::SmartProxy::SmartProxy<
+        SessionCommunications::V1::BridgeManagerPrx> mBridgeManager;
 };
 
 SessionRouter::SessionRouter(const Ice::ObjectAdapterPtr& objectAdapter, const EndpointRegistryPtr& endpointRegistry,
@@ -601,20 +602,31 @@ SessionRouter::~SessionRouter()
     mImpl.reset();
 }
 
-void SessionRouter::setBridgeManagerAccessor(const BridgeManagerAccessorPtr& bridgeAccessor)
+void SessionRouter::setBridgeManager(
+    const AsteriskSCF::SmartProxy::SmartProxy<
+        SessionCommunications::V1::BridgeManagerPrx>& bridgeAccessor)
 {
-    mImpl->mBridgeManagerAccessor = bridgeAccessor;
+    mImpl->mBridgeManager = bridgeAccessor;
 }
 
 /**
  * Route the session by looking up the destination endpoint and configuring a complimentary session for the destination.
  *   TBD - Need to rework with asynch support.
  */
-void SessionRouter::routeSession(const AsteriskSCF::SessionCommunications::V1::SessionPrx& source, const std::string& destination,
+void SessionRouter::routeSession(
+    const AsteriskSCF::SessionCommunications::V1::SessionPrx& source,
+    const std::string& destination,
     const Ice::Current& current)
 {
     lg(Debug) << "routeSession() entered with destination " << destination ;
 
+    if (!mImpl->mBridgeManager.initializeOnce())
+    {
+        lg(Error) << "No proxy to BridgeManager.  "
+            "Make sure all services are running.";
+        throw BridgingException(source->getEndpoint()->getId(), destination);
+    }
+
     // Create a listener for the source to handle early termination.
     // The wrapper we're using will remove the listener and free it when
     // this method is left.
@@ -624,7 +636,7 @@ void SessionRouter::routeSession(const AsteriskSCF::SessionCommunications::V1::S
     lg(Debug) << "routeSession(): Routing destination " << destination;
     EndpointSeq endpoints = mImpl->lookupEndpoints(destination, current);
 
-    // Add a session to the endpoints. 
+    // Add a session to the endpoints.
     SessionSeq newSessions = mImpl->createSessionForEndpoints(endpoints, destination, listener);
 
     if (listener->getNumSessions() < 2)
@@ -637,8 +649,8 @@ void SessionRouter::routeSession(const AsteriskSCF::SessionCommunications::V1::S
         throw SourceTerminatedPreBridgingException(source->getEndpoint()->getId());
     }
 
-    // We're through listening, and we will probably interfere with the Bridge's functionality if
-    // we keep listening.
+    // We're through listening, and we will probably interfere with the
+    // Bridge's functionality if we keep listening.
     listener->unregister();
 
     // Create the bridge
@@ -652,7 +664,7 @@ void SessionRouter::routeSession(const AsteriskSCF::SessionCommunications::V1::S
         bridgedSessions.insert(bridgedSessions.end(), newSessions.begin(), newSessions.end());
 
         lg(Debug) << "routeSession(): Creating bridge.";
-        bridge = mImpl->mBridgeManagerAccessor->getBridgeManager()->createBridge(bridgedSessions, 0);
+        bridge = mImpl->mBridgeManager->createBridge(bridgedSessions, 0);
     }
     catch (const Ice::Exception &e)
     {
diff --git a/src/SessionRouter.h b/src/SessionRouter.h
index 3453436..d955519 100644
--- a/src/SessionRouter.h
+++ b/src/SessionRouter.h
@@ -18,8 +18,8 @@
 #include <Ice/Ice.h>
 #include <boost/shared_ptr.hpp>
 
+#include "SmartProxy.h"
 #include "SessionCommunications/SessionCommunicationsIf.h"
-#include "BridgeManagerAccessor.h"
 #include "EndpointRegistry.h"
 
 namespace AsteriskSCF
@@ -38,7 +38,9 @@ public:
         const AsteriskSCF::Core::Routing::V1::Event::RoutingEventsPtr& eventPublisher);
     ~SessionRouter();
 
-    void setBridgeManagerAccessor(const BridgeManagerAccessorPtr& bridgeAccessor);
+    void setBridgeManager(
+        const AsteriskSCF::SmartProxy::SmartProxy<
+            SessionCommunications::V1::BridgeManagerPrx>& bridgeAccessor);
 
 public:
     // SessionRouter overrides

-----------------------------------------------------------------------


-- 
asterisk-scf/integration/routing.git



More information about the asterisk-scf-commits mailing list