Dispatch Interceptor API
namespace Ice {
class DispatchInterceptor : public virtual Object {
public:
virtual DispatchStatus dispatch(Request&) = 0;
};
typedef IceInternal::Handle<DispatchInterceptor> DispatchInterceptorPtr;
}
namespace Ice {
enum DispatchStatus {
DispatchOK, DispatchUserException, DispatchAsync
};
}
namespace Ice {
class Request {
public:
virtual const Current& getCurrent();
};
}
Using a Dispatch Interceptor
class InterceptorI : public Ice::DispatchInterceptor {
public:
InterceptorI(const Ice::ObjectPtr& servant)
: _servant(servant) {}
virtual Ice::DispatchStatus dispatch(Ice::Request& request) {
return _servant->ice_dispatch(request);
}
Ice::ObjectPtr _servant;
};
ExampleIPtr servant = new ExampleI;
Ice::DispatchInterceptorPtr interceptor = new InterceptorI(servant);
adapter->add(interceptor, communicator->stringToIdentity("ExampleServant"));
virtual Ice::DispatchStatus dispatch(Ice::Request& request) {
while (true) {
try {
return _servant->ice_dispatch(request);
} catch (const DeadlockException&) {
// Happens occasionally
}
}
}