00001
00002
00003
00004
00005
00006
00007 #ifndef __IWVSTREAM_H
00008 #define __IWVSTREAM_H
00009
00010 #include "wvbuf.h"
00011 #include "wverror.h"
00012 #include "wvtr1.h"
00013 #include "wvxplc.h"
00014
00015
00016 class WvAddr;
00017 class WvStream;
00018
00019
00020
00021 typedef wv::function<void()> IWvStreamCallback;
00022 typedef unsigned int WSID;
00023
00024 class IWvStream : public WvErrorBase, public IObject
00025 {
00026 public:
00027 static IWvStream *create(WvStringParm moniker, IObject *obj = NULL);
00028
00034 struct SelectRequest {
00035 bool readable, writable, isexception;
00036
00037 SelectRequest() { }
00038 SelectRequest(bool r, bool w, bool x = false)
00039 { readable = r; writable = w; isexception = x; }
00040
00041 SelectRequest &operator |= (const SelectRequest &r)
00042 { readable |= r.readable; writable |= r.writable;
00043 isexception |= r.isexception; return *this; }
00044 };
00045
00050 struct SelectInfo {
00051 fd_set read, write, except;
00052 SelectRequest wants;
00053 int max_fd;
00054 time_t msec_timeout;
00055 bool inherit_request;
00056 bool global_sure;
00057 };
00058
00059 IWvStream();
00060 virtual ~IWvStream();
00061 virtual void close() = 0;
00062 virtual bool isok() const = 0;
00063 virtual void callback() = 0;
00064
00065
00066 virtual int getrfd() const = 0;
00067 virtual int getwfd() const = 0;
00068
00069
00070 virtual const WvAddr *src() const = 0;
00071
00072
00073
00074 virtual void pre_select(SelectInfo &si) = 0;
00075 virtual bool post_select(SelectInfo &si) = 0;
00076
00077
00078
00079 virtual size_t read(void *buf, size_t count) = 0;
00080 virtual size_t write(const void *buf, size_t count) = 0;
00081
00082
00083
00084
00085 virtual size_t read(WvBuf &outbuf, size_t count) = 0;
00086 virtual size_t write(WvBuf &inbuf, size_t count = INT_MAX) = 0;
00087
00100 virtual void noread() = 0;
00101
00110 virtual void nowrite() = 0;
00111
00116 virtual void maybe_autoclose() = 0;
00117
00119 virtual bool isreadable() = 0;
00120
00122 virtual bool iswritable() = 0;
00123
00133 virtual bool flush(time_t msec_timeout) = 0;
00134
00141 virtual bool should_flush() = 0;
00142
00143
00144
00145
00147 virtual IWvStreamCallback setreadcallback(IWvStreamCallback _callfunc) = 0;
00148
00150 virtual IWvStreamCallback setwritecallback(IWvStreamCallback _callfunc) = 0;
00151
00154 virtual IWvStreamCallback setexceptcallback(IWvStreamCallback _callfunc) = 0;
00155
00156
00157
00158
00160 virtual IWvStreamCallback setclosecallback(IWvStreamCallback _callfunc) = 0;
00161
00162
00163 virtual const char *wsname() const = 0;
00164 virtual void set_wsname(WvStringParm name) = 0;
00165 virtual const char *wstype() const = 0;
00166 virtual WSID wsid() const = 0;
00167
00173 virtual void outbuf_limit(size_t size) = 0;
00174 virtual WvString getattr(WvStringParm name) const = 0;
00175 };
00176
00177 DEFINE_IID(IWvStream, {0x7ca76e98, 0xb653, 0x43d7,
00178 {0xb0, 0x56, 0x8b, 0x9d, 0xde, 0x9a, 0xbe, 0x9d}});
00179
00180
00181 #endif