summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/AdminRouter.cpp
diff options
context:
space:
mode:
authorBernard Normier <bernard@zeroc.com>2014-09-10 19:09:53 +0000
committerBernard Normier <bernard@zeroc.com>2014-09-10 19:09:53 +0000
commitac587d9f1a6d34e46956fd17c81f99beb7ed97ad (patch)
treefa09b2b2d5b6037c76976ee293eb0d15b7a93717 /cpp/src/IceGrid/AdminRouter.cpp
parentFix networkProxy test dependencies (diff)
downloadice-ac587d9f1a6d34e46956fd17c81f99beb7ed97ad.tar.bz2
ice-ac587d9f1a6d34e46956fd17c81f99beb7ed97ad.tar.xz
ice-ac587d9f1a6d34e46956fd17c81f99beb7ed97ad.zip
IceGrid::Admin now provides remote access to IceGrid registry and node Admin objects, and icegridadmin uses these
new operations to show the Ice log file for IceGrid registries and IceGrid nodes (ICE-2400)
Diffstat (limited to 'cpp/src/IceGrid/AdminRouter.cpp')
-rw-r--r--cpp/src/IceGrid/AdminRouter.cpp60
1 files changed, 60 insertions, 0 deletions
diff --git a/cpp/src/IceGrid/AdminRouter.cpp b/cpp/src/IceGrid/AdminRouter.cpp
new file mode 100644
index 00000000000..3c23bf46cce
--- /dev/null
+++ b/cpp/src/IceGrid/AdminRouter.cpp
@@ -0,0 +1,60 @@
+// **********************************************************************
+//
+// Copyright (c) 2003-2014 ZeroC, Inc. All rights reserved.
+//
+// This copy of Ice is licensed to you under the terms described in the
+// ICE_LICENSE file included in this distribution.
+//
+// **********************************************************************
+
+#include <IceGrid/AdminRouter.h>
+
+using namespace Ice;
+using namespace std;
+
+namespace
+{
+
+class CallbackI : public IceUtil::Shared
+{
+public:
+
+ CallbackI(const AMD_Object_ice_invokePtr& cb) :
+ _cb(cb)
+ {
+ }
+
+ void response(bool ok, const pair<const Byte*, const Byte*>& outParams)
+ {
+ _cb->ice_response(ok, outParams);
+ }
+
+ void exception(const Ice::Exception&)
+ {
+ // Admin object is unreachable
+ _cb->ice_exception(ObjectNotExistException(__FILE__, __LINE__));
+ }
+
+private:
+ AMD_Object_ice_invokePtr _cb;
+};
+
+}
+
+void
+IceGrid::AdminRouter::ice_invoke_async(const AMD_Object_ice_invokePtr& cb,
+ const pair<const Byte*, const Byte*>& inParams,
+ const Current& current)
+{
+ ObjectPrx target = getTarget(current);
+ assert(target != 0);
+
+ //
+ // Call with AMI
+ //
+ Callback_Object_ice_invokePtr amiCb =
+ newCallback_Object_ice_invoke(new CallbackI(cb), &CallbackI::response, &CallbackI::exception);
+
+ target->begin_ice_invoke(current.operation, current.mode, inParams, current.ctx, amiCb);
+}
+