00001 #ifndef _sys_ProtocolAccess_h
00002 #define _sys_ProtocolAccess_h
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "AsynchIO.h"
00026 #include "AsynchIOHandler.h"
00027 #include <boost/function.hpp>
00028 #include <boost/shared_ptr.hpp>
00029
00030 namespace qpid {
00031
00032 namespace broker
00033 {
00034 class Connection;
00035 }
00036
00037 namespace sys {
00038
00039 class ProtocolAccess
00040 {
00041 public:
00042 typedef boost::function0<void> Callback;
00043 typedef boost::function2<void, int, std::string> ClosedCallback;
00044 typedef boost::function1<void, boost::shared_ptr<broker::Connection> > SetConnCallback;
00045
00046 ProtocolAccess (Callback ecb, ClosedCallback ccb, SetConnCallback sccb)
00047 : aio(0), establishedCb(ecb), closedCb(ccb), setConnCb(sccb) {}
00048 ~ProtocolAccess() {}
00049 inline void close() { if (aio) aio->queueWriteClose(); }
00050
00051 inline void setAio(AsynchIO *_aio) { aio = _aio; establishedCb(); }
00052 inline void closedEof(AsynchIOHandler* async) { async->eof(*aio); closedCb(-1, "Closed by Peer"); }
00053 inline void closed(int err, std::string str) { closedCb(err, str); }
00054 inline void callConnCb(boost::shared_ptr<broker::Connection> c) { setConnCb(c); }
00055
00056 private:
00057 AsynchIO* aio;
00058 Callback establishedCb;
00059 ClosedCallback closedCb;
00060 SetConnCallback setConnCb;
00061 };
00062
00063 }}
00064
00065 #endif