From: Christian P. <cp...@us...> - 2005-02-07 18:47:24
|
Update of /cvsroot/pclasses/pclasses2/include/pclasses/Net In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv20255/include/pclasses/Net Modified Files: Socket.h Log Message: Added SocketListener. Index: Socket.h =================================================================== RCS file: /cvsroot/pclasses/pclasses2/include/pclasses/Net/Socket.h,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- Socket.h 26 Jan 2005 10:23:17 -0000 1.6 +++ Socket.h 7 Feb 2005 18:47:13 -0000 1.7 @@ -23,7 +23,9 @@ #include <pclasses/Export.h> #include <pclasses/BasicTypes.h> +#include <pclasses/Signal.h> #include <pclasses/IO/IODevice.h> +#include <pclasses/System/EventQueue.h> #include <pclasses/Net/NetworkAddress.h> namespace P { @@ -32,9 +34,13 @@ typedef uint16_t port_t; +class SocketListener; + //! Socket class PNET_EXPORT Socket: public IO::IODevice { public: + friend class SocketListener; + enum Domain { Inet, Inet6, @@ -54,7 +60,6 @@ }; Socket() throw(); - Socket(Domain domain, Type type, int proto = 0) throw(IO::IOError); ~Socket() throw(); Domain domain() const throw(); @@ -92,6 +97,8 @@ static Domain addrFamily2Domain(int family); protected: + Socket(Domain domain, Type type, int proto = 0) throw(IO::IOError); + void open(Domain domain, Type type, int proto) throw(IO::IOError); @@ -113,6 +120,41 @@ int _handle; }; + +//! Socket Event-listener +class PNET_EXPORT SocketListener: public System::EventListener { + public: + enum EventMask { + Read = 0x01, + Write = 0x02, + Error = 0x04 + }; + + SocketListener(Socket& s); + SocketListener(System::EventQueue& evq, Socket& s); + ~SocketListener(); + + Socket& socket() const throw(); + + void setEventMask(int mask); + int eventMask() const throw(); + + Signal1<void, SocketListener&> sigRead; + Signal1<void, SocketListener&> sigWrite; + Signal1<void, SocketListener&> sigError; + + protected: + virtual void onRead(); + virtual void onWrite(); + virtual void onError(); + + private: + void signaled(const System::Event& ev); + unsigned long _handle; +}; + + + //! Datagram Socket class PNET_EXPORT DatagramSocket: public virtual Socket { public: @@ -151,9 +193,11 @@ class PNET_EXPORT StreamSocket: public virtual Socket { public: StreamSocket() throw(); + StreamSocket(Domain d, int proto) throw(IO::IOError); StreamSocket(StreamSocketServer& srv) throw(IO::IOError); ~StreamSocket() throw(); + void open(Domain d, int proto) throw(IO::IOError); void open(StreamSocketServer& srv) throw(IO::IOError); }; |