00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _Future_
00023 #define _Future_
00024
00025 #include <boost/bind.hpp>
00026 #include <boost/shared_ptr.hpp>
00027 #include "qpid/Exception.h"
00028 #include "qpid/framing/SequenceNumber.h"
00029 #include "qpid/framing/StructHelper.h"
00030 #include "FutureCompletion.h"
00031 #include "FutureResult.h"
00032 #include "SessionImpl.h"
00033
00034 namespace qpid {
00035 namespace client {
00036
00037 class Future : private framing::StructHelper
00038 {
00039 framing::SequenceNumber command;
00040 boost::shared_ptr<FutureResult> result;
00041 bool complete;
00042
00043 public:
00044 Future() : complete(false) {}
00045 Future(const framing::SequenceNumber& id) : command(id), complete(false) {}
00046
00047 template <class T> void decodeResult(T& value, SessionImpl& session)
00048 {
00049 if (result) {
00050 decode(value, result->getResult(session));
00051 } else {
00052 throw Exception("Result not expected");
00053 }
00054 }
00055
00056 void wait(SessionImpl& session);
00057 bool isComplete(SessionImpl& session);
00058 void setFutureResult(boost::shared_ptr<FutureResult> r);
00059 };
00060
00061 }}
00062
00063 #endif