Archived
This forum has been archived. Please start a new discussion on GitHub.
Create Proxy on client side with identity and category for ServantLocator
in Help Center
Hi,
I have just read about Ice Servant Locators and tried to implement one to test it.
So here is my implementation:
MyLocator.h
MyLocator.cpp
Server.cpp
And my question is: How to create proxy on client side with Identity such as:
id.name="id0"
id.category="myids"
I have just read about Ice Servant Locators and tried to implement one to test it.
So here is my implementation:
MyLocator.h
#ifndef _MYLOCATOR_H_
#define _MYLOCATOR_H_
#include <Ice/Ice.h>
#include <vector>
using namespace std;
class MyLocator : public virtual Ice::ServantLocator
{
public:
MyLocator();
virtual Ice::ObjectPtr locate( const Ice::Current& c,
Ice::LocalObjectPtr& cookie );
virtual void finished( const Ice::Current& c,
const Ice::ObjectPtr& servant,
const Ice::LocalObjectPtr& cookie );
virtual void deactivate( const std::string &category );
private:
vector<string> _myids;
};
#endif _MYLOCATOR_H_
MyLocator.cpp
#include "MyLocator.h"
#include "LocatorTestI.h"
using namespace LocatorTest;
using namespace std;
MyLocator::MyLocator()
{
_myids.push_back("id0");
_myids.push_back("id5");
_myids.push_back("id10");
}
Ice::ObjectPtr
MyLocator::locate(const Ice::Current &c, Ice::LocalObjectPtr &cookie)
{
string name = c.id.name;
vector<string>::iterator it;
for( it = _myids.begin(); it != _myids.end(); it++ )
if( (*it) == name )
return new LocatorTestI;
return 0;
}
void
MyLocator::finished(const Ice::Current &c, const Ice::ObjectPtr &servant, const Ice::LocalObjectPtr &cookie)
{
}
void
MyLocator::deactivate(const std::string &category)
{
}
Server.cpp
#include <Ice/Ice.h>
#include <Ice/Application.h>
#include <iostream>
#include "LocatorTestI.h"
#include "MyLocator.h"
using namespace std;
class MyApp : public virtual Ice::Application
{
public:
virtual int run( int, char *[] );
private:
Ice::ObjectAdapterPtr _adapter;
};
int
main( int argc, char *argv[] )
{
MyApp app;
return app.main( argc, argv );
}
int
MyApp::run(int, char *[])
{
_adapter = communicator()->createObjectAdapterWithEndpoints("myAdapter", "default -p 10000");
MyLocator *locator = new MyLocator();
_adapter->addServantLocator(locator, "myids");
_adapter->activate();
communicator()->waitForShutdown();
return 0;
}
And my question is: How to create proxy on client side with Identity such as:
id.name="id0"
id.category="myids"
0
Comments
-
You can specify both category and name in your proxy string. For example
communicator->stringToProxy("category/name:tcp -p 10000 -h 127.0.0.1");
changing category and name appropriately. In your case "myids/id0".0