server.cpp
来自「ICE-3.2 一个开源的中间件」· C++ 代码 · 共 143 行
CPP
143 行
// **********************************************************************//// Copyright (c) 2003-2007 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 <Ice/Application.h>#include <Ice/Locator.h>#include <BackendI.h>using namespace std;using namespace Ice;using namespace Test;//// Dummy ServerLocatorRegistry, ServerLocator and ServantLocator. For// simplicity, we essentially 'alias' all possible requests to a single// object adapter and a single servant.//class ServerLocatorRegistry : virtual public LocatorRegistry{public: virtual void setAdapterDirectProxy_async(const AMD_LocatorRegistry_setAdapterDirectProxyPtr& cb, const string&, const ObjectPrx&, const Current&) { cb->ice_response(); } virtual void setReplicatedAdapterDirectProxy_async(const AMD_LocatorRegistry_setReplicatedAdapterDirectProxyPtr& cb, const string&, const string&, const ObjectPrx&, const Current&) { cb->ice_response(); } virtual void setServerProcessProxy_async(const AMD_LocatorRegistry_setServerProcessProxyPtr& cb, const string&, const ProcessPrx&, const Current&) { cb->ice_response(); }};class ServerLocatorI : virtual public Locator{public: ServerLocatorI(const BackendPtr& backend, const ObjectAdapterPtr& adapter) : _backend(backend), _adapter(adapter), _registryPrx( LocatorRegistryPrx::uncheckedCast( adapter->add(new ServerLocatorRegistry, _adapter->getCommunicator()->stringToIdentity("registry")))) { } virtual void findObjectById_async(const AMD_Locator_findObjectByIdPtr& cb, const Identity& id, const Current&) const { cb->ice_response(_adapter->createProxy(id)); } virtual void findAdapterById_async(const AMD_Locator_findAdapterByIdPtr& cb, const string& id, const Current& current) const { cb->ice_response(_adapter->createDirectProxy(_adapter->getCommunicator()->stringToIdentity("dummy"))); } virtual LocatorRegistryPrx getRegistry(const Current&) const { return _registryPrx; }private: const BackendPtr _backend; const ObjectAdapterPtr _adapter; const LocatorRegistryPrx _registryPrx;};class ServantLocatorI : virtual public ServantLocator{public: ServantLocatorI(const BackendPtr& backend) : _backend(backend) { } virtual ObjectPtr locate(const Current&, LocalObjectPtr&) { return _backend; } virtual void finished(const Current&, const ObjectPtr&, const LocalObjectPtr&) { } virtual void deactivate(const string&) { }private: const BackendPtr _backend;};class BackendServer : public Application{public: virtual int run(int, char*[]);};intmain(int argc, char* argv[]){ BackendServer app; return app.main(argc, argv);}intBackendServer::run(int argc, char* argv[]){ string endpoints = communicator()->getProperties()->getPropertyWithDefault("BackendAdapter.Endpoints", "tcp -p 12010 -t 20000:ssl -p 12011 -t 20000"); communicator()->getProperties()->setProperty("BackendAdapter.Endpoints", endpoints); ObjectAdapterPtr adapter = communicator()->createObjectAdapter("BackendAdapter"); BackendPtr backend = new BackendI; Ice::LocatorPtr locator = new ServerLocatorI(backend, adapter); adapter->add(locator, communicator()->stringToIdentity("locator")); adapter->addServantLocator(new ServantLocatorI(backend), ""); adapter->activate(); communicator()->waitForShutdown(); return EXIT_SUCCESS;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?