Archived
This forum has been archived. Please start a new discussion on GitHub.
Communicator from an object ?
Hi there,
Is it possible to access the communicator from the interface class ?
I have a class which inherits an interface :
class MyClassI : public MyClass {
void myMethod(void);
};
myMethod is not in the interface (it is custom/local to MyClassI).
I would like access to the communicator in myMethod(); so that I can create an adapter and so on.
This may not be the correct paradigm of operation, however I was going to test some ideas out.
The only way I can work out how to get access to the communicator is to manually store it in MyClassI when I am in the Ice::Application::run method :
Something like so :
Ice::Application::run(argc, argv){
MyClassI::storeCommunicator(CommunicatorPtr c){
communicator=c;
}
}
Is there a better way to get access to the communicator in the method MyClass::myMethod ?
thanks
Matt
Is it possible to access the communicator from the interface class ?
I have a class which inherits an interface :
class MyClassI : public MyClass {
void myMethod(void);
};
myMethod is not in the interface (it is custom/local to MyClassI).
I would like access to the communicator in myMethod(); so that I can create an adapter and so on.
This may not be the correct paradigm of operation, however I was going to test some ideas out.
The only way I can work out how to get access to the communicator is to manually store it in MyClassI when I am in the Ice::Application::run method :
Something like so :
Ice::Application::run(argc, argv){
MyClassI::storeCommunicator(CommunicatorPtr c){
communicator=c;
}
}
Is there a better way to get access to the communicator in the method MyClass::myMethod ?
thanks
Matt
0
Comments
-
Hi Matt,
You can access the communicator from a servant operation throw the Current object// Slice module Demo { interface Hello { void sayHello(); }; }; // C++ class HelloI : public Hello { public: void sayHello(const Ice::Current& c) { Ice::CommunicatorPtr ic = c.adapter->getCommunicator(); } };
Or you can store a reference to the communicator when you create your servant.class HelloI : public Hello { public: HelloI(const Ice::CommunicatorPtr& ic) : _ic(ic) { } private: Ice::CommunicatorPtr _ic; }; class Server : public Ice::Application { public: virtual int run(int, char*[]) { // ... adapter->add(new HelloI(communicator()), communicator()->stringToIdentity("hello")); // ... } };
0