Ice 3.7 C++11 API Reference
OutgoingAsync.h
Go to the documentation of this file.
1 //
2 // Copyright (c) ZeroC, Inc. All rights reserved.
3 //
4 
5 #ifndef ICE_OUTGOING_ASYNC_H
6 #define ICE_OUTGOING_ASYNC_H
7 
8 #include <IceUtil/Timer.h>
9 #include <IceUtil/Monitor.h>
10 #include <Ice/OutgoingAsyncF.h>
11 #include <Ice/CommunicatorF.h>
12 #include <Ice/ConnectionIF.h>
13 #include <Ice/ObjectAdapterF.h>
14 #include <Ice/RequestHandlerF.h>
15 #include <Ice/ConnectionF.h>
16 #include <Ice/OutputStream.h>
17 #include <Ice/InputStream.h>
18 #include <Ice/ObserverHelper.h>
19 #include <Ice/LocalException.h>
20 #include <Ice/UniquePtr.h>
21 
22 #ifndef ICE_CPP11_MAPPING
23 # include <Ice/AsyncResult.h>
24 #endif
25 
26 #include <exception>
27 
28 namespace IceInternal
29 {
30 
31 class RetryException;
32 class CollocatedRequestHandler;
33 
34 class ICE_API OutgoingAsyncCompletionCallback
35 {
36 public:
37  virtual ~OutgoingAsyncCompletionCallback();
38 
39 protected:
40 
41  virtual bool handleSent(bool, bool) = 0;
42  virtual bool handleException(const Ice::Exception&) = 0;
43  virtual bool handleResponse(bool) = 0;
44 
45  virtual void handleInvokeSent(bool, OutgoingAsyncBase*) const = 0;
46  virtual void handleInvokeException(const Ice::Exception&, OutgoingAsyncBase*) const = 0;
47  virtual void handleInvokeResponse(bool, OutgoingAsyncBase*) const = 0;
48 };
49 
50 //
51 // Base class for handling asynchronous invocations. This class is
52 // responsible for the handling of the output stream and the child
53 // invocation observer.
54 //
55 class ICE_API OutgoingAsyncBase : public virtual OutgoingAsyncCompletionCallback,
56 #ifdef ICE_CPP11_MAPPING
57  public std::enable_shared_from_this<OutgoingAsyncBase>
58 #else
59  public Ice::AsyncResult
60 #endif
61 {
62 public:
63 
64  virtual bool sent();
65  virtual bool exception(const Ice::Exception&);
66  virtual bool response();
67 
68  void invokeSentAsync();
69  void invokeExceptionAsync();
70  void invokeResponseAsync();
71 
72  void invokeSent();
73  void invokeException();
74  void invokeResponse();
75 
76  virtual void cancelable(const IceInternal::CancellationHandlerPtr&);
77  void cancel();
78 
79 #ifndef ICE_CPP11_MAPPING
80  virtual Ice::Int getHash() const;
81 
82  virtual Ice::CommunicatorPtr getCommunicator() const;
83  virtual Ice::ConnectionPtr getConnection() const;
84  virtual Ice::ObjectPrx getProxy() const;
85 
86  virtual Ice::LocalObjectPtr getCookie() const;
87  virtual const std::string& getOperation() const;
88 
89  virtual bool isCompleted() const;
90  virtual void waitForCompleted();
91 
92  virtual bool isSent() const;
93  virtual void waitForSent();
94 
95  virtual bool sentSynchronously() const;
96 
97  virtual void throwLocalException() const;
98 
99  virtual bool _waitForResponse();
100  virtual Ice::InputStream* _startReadParams();
101  virtual void _endReadParams();
102  virtual void _readEmptyParams();
103  virtual void _readParamEncaps(const ::Ice::Byte*&, ::Ice::Int&);
104  virtual void _throwUserException();
105 
106  virtual void _scheduleCallback(const CallbackPtr&);
107 #endif
108 
109  void attachRemoteObserver(const Ice::ConnectionInfoPtr& c, const Ice::EndpointPtr& endpt, Ice::Int requestId)
110  {
111  const Ice::Int size = static_cast<Ice::Int>(_os.b.size() - headerSize - 4);
112  _childObserver.attach(getObserver().getRemoteObserver(c, endpt, requestId, size));
113  }
114 
115  void attachCollocatedObserver(const Ice::ObjectAdapterPtr& adapter, Ice::Int requestId)
116  {
117  const Ice::Int size = static_cast<Ice::Int>(_os.b.size() - headerSize - 4);
118  _childObserver.attach(getObserver().getCollocatedObserver(adapter, requestId, size));
119  }
120 
121  Ice::OutputStream* getOs()
122  {
123  return &_os;
124  }
125 
126  Ice::InputStream* getIs()
127  {
128  return &_is;
129  }
130 
131 protected:
132 
133  OutgoingAsyncBase(const InstancePtr&);
134 
135  bool sentImpl(bool);
136  bool exceptionImpl(const Ice::Exception&);
137  bool responseImpl(bool, bool);
138 
139  void cancel(const Ice::LocalException&);
140  void checkCanceled();
141 
142  void warning(const std::exception&) const;
143  void warning() const;
144 
145  //
146  // This virtual method is necessary for the communicator flush
147  // batch requests implementation.
148  //
149  virtual IceInternal::InvocationObserver& getObserver()
150  {
151  return _observer;
152  }
153 
154  const InstancePtr _instance;
155  Ice::ConnectionPtr _cachedConnection;
156  bool _sentSynchronously;
157  bool _doneInSent;
158  unsigned char _state;
159 
160 #ifdef ICE_CPP11_MAPPING
161  std::mutex _m;
162  using Lock = std::lock_guard<std::mutex>;
163 #else
166  Ice::LocalObjectPtr _cookie;
167 #endif
168 
169  IceInternal::UniquePtr<Ice::Exception> _ex;
170  IceInternal::UniquePtr<Ice::LocalException> _cancellationException;
171 
172  InvocationObserver _observer;
173  ObserverHelperT<Ice::Instrumentation::ChildInvocationObserver> _childObserver;
174 
175  Ice::OutputStream _os;
176  Ice::InputStream _is;
177 
178  CancellationHandlerPtr _cancellationHandler;
179 
180  static const unsigned char OK;
181  static const unsigned char Sent;
182 #ifndef ICE_CPP11_MAPPING
183  static const unsigned char Done;
184  static const unsigned char EndCalled;
185 #endif
186 };
187 
188 //
189 // Base class for proxy based invocations. This class handles the
190 // retry for proxy invocations. It also ensures the child observer is
191 // correct notified of failures and make sure the retry task is
192 // correctly canceled when the invocation completes.
193 //
194 class ICE_API ProxyOutgoingAsyncBase : public OutgoingAsyncBase,
195  public IceUtil::TimerTask
196 {
197 public:
198 
199  virtual AsyncStatus invokeRemote(const Ice::ConnectionIPtr&, bool, bool) = 0;
200  virtual AsyncStatus invokeCollocated(CollocatedRequestHandler*) = 0;
201 
202  virtual bool exception(const Ice::Exception&);
203  virtual void cancelable(const CancellationHandlerPtr&);
204 
205  void retryException(const Ice::Exception&);
206  void retry();
207  void abort(const Ice::Exception&);
208 
209 #ifdef ICE_CPP11_MAPPING
210  std::shared_ptr<ProxyOutgoingAsyncBase> shared_from_this()
211  {
212  return std::static_pointer_cast<ProxyOutgoingAsyncBase>(OutgoingAsyncBase::shared_from_this());
213  }
214 #else
215  virtual Ice::ObjectPrx getProxy() const;
216  virtual Ice::CommunicatorPtr getCommunicator() const;
217 #endif
218 
219 protected:
220 
221  ProxyOutgoingAsyncBase(const Ice::ObjectPrxPtr&);
222  ~ProxyOutgoingAsyncBase();
223 
224  void invokeImpl(bool);
225  bool sentImpl(bool);
226  bool exceptionImpl(const Ice::Exception&);
227  bool responseImpl(bool, bool);
228 
229  virtual void runTimerTask();
230 
231  const Ice::ObjectPrxPtr _proxy;
232  RequestHandlerPtr _handler;
233  Ice::OperationMode _mode;
234 
235 private:
236 
237  int _cnt;
238  bool _sent;
239 };
240 
241 //
242 // Class for handling Slice operation invocations
243 //
244 class ICE_API OutgoingAsync : public ProxyOutgoingAsyncBase
245 {
246 public:
247 
248  OutgoingAsync(const Ice::ObjectPrxPtr&, bool);
249 
250  void prepare(const std::string&, Ice::OperationMode, const Ice::Context&);
251 
252  virtual bool sent();
253  virtual bool response();
254 
255  virtual AsyncStatus invokeRemote(const Ice::ConnectionIPtr&, bool, bool);
256  virtual AsyncStatus invokeCollocated(CollocatedRequestHandler*);
257 
258  void abort(const Ice::Exception&);
259  void invoke(const std::string&);
260 #ifdef ICE_CPP11_MAPPING
261  void invoke(const std::string&, Ice::OperationMode, Ice::FormatType, const Ice::Context&,
262  std::function<void(Ice::OutputStream*)>);
263  void throwUserException();
264 #endif
265 
266  Ice::OutputStream* startWriteParams(Ice::FormatType format)
267  {
268  _os.startEncapsulation(_encoding, format);
269  return &_os;
270  }
271  void endWriteParams()
272  {
273  _os.endEncapsulation();
274  }
275  void writeEmptyParams()
276  {
277  _os.writeEmptyEncapsulation(_encoding);
278  }
279  void writeParamEncaps(const ::Ice::Byte* encaps, ::Ice::Int size)
280  {
281  if(size == 0)
282  {
283  _os.writeEmptyEncapsulation(_encoding);
284  }
285  else
286  {
287  _os.writeEncapsulation(encaps, size);
288  }
289  }
290 
291 protected:
292 
293  const Ice::EncodingVersion _encoding;
294 
295 #ifdef ICE_CPP11_MAPPING
296  std::function<void(const ::Ice::UserException&)> _userException;
297 #endif
298 
299  bool _synchronous;
300 };
301 
302 }
303 
304 namespace IceInternal
305 {
306 
307 #ifdef ICE_CPP11_MAPPING
308 
309 class ICE_API LambdaInvoke : public virtual OutgoingAsyncCompletionCallback
310 {
311 public:
312 
313  LambdaInvoke(std::function<void(::std::exception_ptr)> exception, std::function<void(bool)> sent) :
314  _exception(std::move(exception)), _sent(std::move(sent))
315  {
316  }
317 
318 protected:
319 
320  virtual bool handleSent(bool, bool) override;
321  virtual bool handleException(const Ice::Exception&) override;
322  virtual bool handleResponse(bool) override;
323 
324  virtual void handleInvokeSent(bool, OutgoingAsyncBase*) const override;
325  virtual void handleInvokeException(const Ice::Exception&, OutgoingAsyncBase*) const override;
326  virtual void handleInvokeResponse(bool, OutgoingAsyncBase*) const override;
327 
328  std::function<void(::std::exception_ptr)> _exception;
329  std::function<void(bool)> _sent;
330  std::function<void(bool)> _response;
331 };
332 
333 template<typename Promise>
334 class PromiseInvoke : public virtual OutgoingAsyncCompletionCallback
335 {
336 public:
337 
338  auto
339  getFuture() -> decltype(std::declval<Promise>().get_future())
340  {
341  return _promise.get_future();
342  }
343 
344 protected:
345 
346  Promise _promise;
347  std::function<void(bool)> _response;
348 
349 private:
350 
351  virtual bool handleSent(bool, bool) override
352  {
353  return false;
354  }
355 
356  virtual bool handleException(const Ice::Exception& ex) override
357  {
358  try
359  {
360  ex.ice_throw();
361  }
362  catch(const Ice::Exception&)
363  {
364  _promise.set_exception(std::current_exception());
365  }
366  return false;
367  }
368 
369  virtual bool handleResponse(bool ok) override
370  {
371  _response(ok);
372  return false;
373  }
374 
375  virtual void handleInvokeSent(bool, OutgoingAsyncBase*) const override
376  {
377  assert(false);
378  }
379 
380  virtual void handleInvokeException(const Ice::Exception&, OutgoingAsyncBase*) const override
381  {
382  assert(false);
383  }
384 
385  virtual void handleInvokeResponse(bool, OutgoingAsyncBase*) const override
386  {
387  assert(false);
388  }
389 };
390 
391 template<typename T>
392 class OutgoingAsyncT : public OutgoingAsync
393 {
394 public:
395 
396  using OutgoingAsync::OutgoingAsync;
397 
398  void
399  invoke(const std::string& operation,
400  Ice::OperationMode mode,
401  Ice::FormatType format,
402  const Ice::Context& ctx,
403  std::function<void(Ice::OutputStream*)> write,
404  std::function<void(const Ice::UserException&)> userException)
405  {
406  _read = [](Ice::InputStream* stream)
407  {
408  T v;
409  stream->read(v);
410  return v;
411  };
412  _userException = std::move(userException);
413  OutgoingAsync::invoke(operation, mode, format, ctx, std::move(write));
414  }
415 
416  void
417  invoke(const std::string& operation,
418  Ice::OperationMode mode,
419  Ice::FormatType format,
420  const Ice::Context& ctx,
421  std::function<void(Ice::OutputStream*)> write,
422  std::function<void(const Ice::UserException&)> userException,
423  std::function<T(Ice::InputStream*)> read)
424  {
425  _read = std::move(read);
426  _userException = std::move(userException);
427  OutgoingAsync::invoke(operation, mode, format, ctx, std::move(write));
428  }
429 
430 protected:
431 
432  std::function<T(Ice::InputStream*)> _read;
433 };
434 
435 template<>
436 class OutgoingAsyncT<void> : public OutgoingAsync
437 {
438 public:
439 
440  using OutgoingAsync::OutgoingAsync;
441 
442  void
443  invoke(const std::string& operation,
444  Ice::OperationMode mode,
445  Ice::FormatType format,
446  const Ice::Context& ctx,
447  std::function<void(Ice::OutputStream*)> write,
448  std::function<void(const Ice::UserException&)> userException)
449  {
450  _userException = std::move(userException);
451  OutgoingAsync::invoke(operation, mode, format, ctx, std::move(write));
452  }
453 };
454 
455 template<typename R>
456 class LambdaOutgoing : public OutgoingAsyncT<R>, public LambdaInvoke
457 {
458 public:
459 
460  LambdaOutgoing(const std::shared_ptr<Ice::ObjectPrx>& proxy,
461  std::function<void(R)> response,
462  std::function<void(::std::exception_ptr)> ex,
463  std::function<void(bool)> sent) :
464  OutgoingAsyncT<R>(proxy, false), LambdaInvoke(std::move(ex), std::move(sent))
465  {
466 #if ICE_CPLUSPLUS >= 201402L
467  // Move capture with C++14
468  _response = [this, response = std::move(response)](bool ok)
469 #else
470  _response = [this, response](bool ok)
471 #endif
472  {
473  if(!ok)
474  {
475  this->throwUserException();
476  }
477  else if(response)
478  {
479  assert(this->_read);
480  this->_is.startEncapsulation();
481  R v = this->_read(&this->_is);
482  this->_is.endEncapsulation();
483  try
484  {
485  response(std::move(v));
486  }
487  catch(...)
488  {
489  throw std::current_exception();
490  }
491  }
492  };
493  }
494 };
495 
496 template<>
497 class LambdaOutgoing<void> : public OutgoingAsyncT<void>, public LambdaInvoke
498 {
499 public:
500 
501  LambdaOutgoing(const std::shared_ptr<Ice::ObjectPrx>& proxy,
502  std::function<void()> response,
503  std::function<void(::std::exception_ptr)> ex,
504  std::function<void(bool)> sent) :
505  OutgoingAsyncT<void>(proxy, false), LambdaInvoke(std::move(ex), std::move(sent))
506  {
507 #if ICE_CPLUSPLUS >= 201402L
508  // Move capture with C++14
509  _response = [this, response = std::move(response)](bool ok)
510 #else
511  _response = [this, response](bool ok)
512 #endif
513  {
514  if(!ok)
515  {
516  this->throwUserException();
517  }
518  else if(response)
519  {
520  if(!this->_is.b.empty())
521  {
522  this->_is.skipEmptyEncapsulation();
523  }
524 
525  try
526  {
527  response();
528  }
529  catch(...)
530  {
531  throw std::current_exception();
532  }
533  }
534  };
535  }
536 };
537 
538 class CustomLambdaOutgoing : public OutgoingAsync, public LambdaInvoke
539 {
540 public:
541 
542  CustomLambdaOutgoing(const std::shared_ptr<Ice::ObjectPrx>& proxy,
543  std::function<void(Ice::InputStream*)> read,
544  std::function<void(::std::exception_ptr)> ex,
545  std::function<void(bool)> sent) :
546  OutgoingAsync(proxy, false), LambdaInvoke(std::move(ex), std::move(sent))
547  {
548 #if ICE_CPLUSPLUS >= 201402L
549  // Move capture with C++14
550  _response = [this, read = std::move(read)](bool ok)
551 #else
552  _response = [this, read](bool ok)
553 #endif
554  {
555  if(!ok)
556  {
557  this->throwUserException();
558  }
559  else if(read)
560  {
561  //
562  // Read and respond
563  //
564  read(&this->_is);
565  }
566  };
567  }
568 
569  void
570  invoke(const std::string& operation,
571  Ice::OperationMode mode,
572  Ice::FormatType format,
573  const Ice::Context& ctx,
574  std::function<void(Ice::OutputStream*)> write,
575  std::function<void(const Ice::UserException&)> userException)
576  {
577  _userException = std::move(userException);
578  OutgoingAsync::invoke(operation, mode, format, ctx, std::move(write));
579  }
580 };
581 
582 template<typename P, typename R>
583 class PromiseOutgoing : public OutgoingAsyncT<R>, public PromiseInvoke<P>
584 {
585 public:
586 
587  PromiseOutgoing(const std::shared_ptr<Ice::ObjectPrx>& proxy, bool sync) :
588  OutgoingAsyncT<R>(proxy, sync)
589  {
590  this->_response = [this](bool ok)
591  {
592  if(ok)
593  {
594  assert(this->_read);
595  this->_is.startEncapsulation();
596  R v = this->_read(&this->_is);
597  this->_is.endEncapsulation();
598  this->_promise.set_value(std::move(v));
599  }
600  else
601  {
602  this->throwUserException();
603  }
604  };
605  }
606 };
607 
608 template<typename P>
609 class PromiseOutgoing<P, void> : public OutgoingAsyncT<void>, public PromiseInvoke<P>
610 {
611 public:
612 
613  PromiseOutgoing(const std::shared_ptr<Ice::ObjectPrx>& proxy, bool sync) :
614  OutgoingAsyncT<void>(proxy, sync)
615  {
616  this->_response = [&](bool ok)
617  {
618  if(this->_is.b.empty())
619  {
620  //
621  // If there's no response (oneway, batch-oneway proxies), we just set the promise
622  // on completion without reading anything from the input stream. This is required for
623  // batch invocations.
624  //
625  this->_promise.set_value();
626  }
627  else if(ok)
628  {
629  this->_is.skipEmptyEncapsulation();
630  this->_promise.set_value();
631  }
632  else
633  {
634  this->throwUserException();
635  }
636  };
637  }
638 
639  virtual bool handleSent(bool done, bool) override
640  {
641  if(done)
642  {
643  PromiseInvoke<P>::_promise.set_value();
644  }
645  return false;
646  }
647 };
648 
649 #else
650 
651 //
652 // Base class for all callbacks.
653 //
654 class ICE_API CallbackBase : public IceUtil::Shared
655 {
656 public:
657 
658  virtual ~CallbackBase();
659 
660  void checkCallback(bool, bool);
661 
662  virtual void completed(const ::Ice::AsyncResultPtr&) const = 0;
664  virtual void sent(const ::Ice::AsyncResultPtr&) const = 0;
665  virtual bool hasSentCallback() const = 0;
666 };
667 typedef IceUtil::Handle<CallbackBase> CallbackBasePtr;
668 
669 //
670 // Base class for generic callbacks.
671 //
672 class ICE_API GenericCallbackBase : public virtual CallbackBase
673 {
674 public:
675 
676  virtual ~GenericCallbackBase();
677 };
678 
679 //
680 // See comments in OutgoingAsync.cpp
681 //
682 extern ICE_API CallbackBasePtr dummyCallback ICE_GLOBAL_VAR_SUFFIX;
683 
684 //
685 // Generic callback template that requires the caller to down-cast the
686 // proxy and the cookie that are obtained from the AsyncResult.
687 //
688 template<class T>
689 class AsyncCallback : public GenericCallbackBase
690 {
691 public:
692 
693  typedef T callback_type;
694  typedef IceUtil::Handle<T> TPtr;
695 
696  typedef void (T::*Callback)(const ::Ice::AsyncResultPtr&);
697 
698  AsyncCallback(const TPtr& instance, Callback cb, Callback sentcb = 0) :
699  _callback(instance), _completed(cb), _sent(sentcb)
700  {
701  checkCallback(instance, cb != 0);
702  }
703 
704  virtual void completed(const ::Ice::AsyncResultPtr& result) const
705  {
706  (_callback.get()->*_completed)(result);
707  }
708 
709  virtual CallbackBasePtr verify(const ::Ice::LocalObjectPtr&)
710  {
711  return this; // Nothing to do, the cookie is not type-safe.
712  }
713 
714  virtual void sent(const ::Ice::AsyncResultPtr& result) const
715  {
716  if(_sent)
717  {
718  (_callback.get()->*_sent)(result);
719  }
720  }
721 
722  virtual bool hasSentCallback() const
723  {
724  return _sent != 0;
725  }
726 
727 private:
728 
729  TPtr _callback;
730  Callback _completed;
731  Callback _sent;
732 };
733 
734 class CallbackCompletion : public virtual OutgoingAsyncCompletionCallback
735 {
736 public:
737 
738  CallbackCompletion(const CallbackBasePtr& cb, const Ice::LocalObjectPtr& cookie) : _callback(cb)
739  {
740  if(!_callback)
741  {
742  throw IceUtil::IllegalArgumentException(__FILE__, __LINE__);
743  }
744  const_cast<CallbackBasePtr&>(_callback) = _callback->verify(cookie);
745  }
746 
747  virtual bool handleSent(bool, bool alreadySent)
748  {
749  return _callback && _callback->hasSentCallback() && !alreadySent;
750  }
751 
752  virtual bool handleException(const Ice::Exception&)
753  {
754  return _callback;
755  }
756 
757  virtual bool handleResponse(bool)
758  {
759  return _callback;
760  }
761 
762  virtual void handleInvokeSent(bool, OutgoingAsyncBase* outAsync) const
763  {
764  _callback->sent(outAsync);
765  }
766 
767  virtual void handleInvokeException(const Ice::Exception&, OutgoingAsyncBase* outAsync) const
768  {
769  _callback->completed(outAsync);
770  }
771 
772  virtual void handleInvokeResponse(bool, OutgoingAsyncBase* outAsync) const
773  {
774  _callback->completed(outAsync);
775  }
776 
777 private:
778 
779  const CallbackBasePtr _callback;
780 };
781 
782 class CallbackOutgoing : public OutgoingAsync, public CallbackCompletion
783 {
784 public:
785 
786  CallbackOutgoing(const Ice::ObjectPrx& proxy,
787  const std::string& operation,
788  const CallbackBasePtr& cb,
789  const Ice::LocalObjectPtr& cookie,
790  bool sync) :
791  OutgoingAsync(proxy, sync), CallbackCompletion(cb, cookie), _operation(operation)
792  {
793  _cookie = cookie;
794  }
795 
796  virtual const std::string&
797  getOperation() const
798  {
799  return _operation;
800  }
801 
802 private:
803 
804  const std::string& _operation;
805 };
806 
807 #endif
808 
809 }
810 
811 #ifndef ICE_CPP11_MAPPING
812 
813 namespace Ice
814 {
815 
817 
825 template<class T> CallbackPtr
826 newCallback(const IceUtil::Handle<T>& instance,
827  void (T::*cb)(const AsyncResultPtr&),
828  void (T::*sentcb)(const AsyncResultPtr&) = 0)
829 {
830  return new ::IceInternal::AsyncCallback<T>(instance, cb, sentcb);
831 }
832 
840 template<class T> CallbackPtr
841 newCallback(T* instance,
842  void (T::*cb)(const AsyncResultPtr&),
843  void (T::*sentcb)(const AsyncResultPtr&) = 0)
844 {
845  return new ::IceInternal::AsyncCallback<T>(instance, cb, sentcb);
846 }
847 
848 }
849 
850 //
851 // Operation callbacks are specified in Proxy.h
852 //
853 
854 #endif
855 
856 #endif
ObserverHelper.h
ICE_GLOBAL_VAR_SUFFIX
#define ICE_GLOBAL_VAR_SUFFIX
Definition: Config.h:185
CommunicatorF.h
Ice::LocalObjectPtr
IceInternal::Handle< LocalObject > LocalObjectPtr
Definition: LocalObjectF.h:17
Ice::Context
::std::map<::std::string, ::std::string > Context
A request context.
Definition: Current.h:68
Ice::InputStream
Interface for input streams used to extract Slice types from a sequence of bytes.
Definition: InputStream.h:50
LocalException.h
Ice::OutputStream::startEncapsulation
void startEncapsulation()
Writes the start of an encapsulation using the default encoding version and class encoding format.
OutputStream.h
ConnectionF.h
IceUtil::LockT
Definition: Lock.h:37
ICE_API
#define ICE_API
Definition: Config.h:197
Ice::EncodingVersion
A version structure for the encoding version.
Definition: Version.h:82
Ice::Byte
unsigned char Byte
The mapping for the Slice byte type.
Definition: Config.h:50
UniquePtr.h
IceUtil::Monitor< IceUtil::Mutex >
Timer.h
IceUtil::TimerTask
Definition: Timer.h:31
ConnectionIF.h
RequestHandlerF.h
OutgoingAsyncF.h
Ice::FormatType
FormatType
Describes the possible formats for classes and exceptions.
Definition: Format.h:21
Ice::OutputStream
Interface for output streams used to create a sequence of bytes from Slice types.
Definition: OutputStream.h:28
IceUtil::Exception
Abstract base class for all Ice exceptions.
Definition: Exception.h:22
Ice
Definition: BuiltinSequences.h:56
IceUtil::Handle
Definition: Handle.h:143
Ice::ObjectPrx
Base class of all object proxies.
Definition: Proxy.h:317
IceUtil::IllegalArgumentException
This exception indicates that a function was called with an illegal parameter value.
Definition: Exception.h:204
Ice::LocalException
Base class for all Ice run-time exceptions.
Definition: Exception.h:29
Ice::OperationMode
OperationMode
Determines the retry behavior an invocation in case of a (potentially) recoverable error.
Definition: Current.h:74
InputStream.h
Ice::Int
int Int
The mapping for the Slice int type.
Definition: Config.h:54
IceUtil::Shared
Definition: Shared.h:78
Monitor.h
IceUtil::Exception::ice_throw
virtual void ice_throw() const =0
Throws this exception.
ObjectAdapterF.h
Ice::UserException
Base class for all Ice user exceptions.
Definition: Exception.h:68
AsyncResult.h