00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
#ifndef MN_OS_NET_PIPENOTIFIER_H
00025
#define MN_OS_NET_PIPENOTIFIER_H
00026
00027
#include <config.h>
00028
#include <assert.h>
00029
00030
#include "mnstream.h"
00031
00032
#include "MNSocketBase.h"
00033
#include "MNValid.h"
00034
00035
class MNSelector;
00036
00037 class MNPipeNotifier
00038 :
public MNSocketBase
00039 {
00040
enum RW
00041 {
00042 Read = 0,
00043 Write = 1,
00044 Both = 2
00045 };
00046
00047
int _notepipe[Both];
00048 DECLARE_VALID
00049
00050
public:
00051
MNPipeNotifier();
00052
virtual ~MNPipeNotifier();
00053
00054
virtual void callback (
MNSelector* select,
int fd );
00055
00056
virtual int get_sockdesc ( )
const;
00057
00058
00059
00060
00061
virtual void wokenUp();
00062
virtual void closedDown();
00063
00064
00065
00066
00067
void wakeup();
00068
void closedown();
00069 };
00070
00071
template <
class T>
00072 struct PipeNotifier :
public MNPipeNotifier
00073 {
00074 typedef void (T::*
callback)( );
00075
00076 T* _client;
00077 callback _wokenup;
00078 callback _closedown;
00079
00080 PipeNotifier( T* client,
callback wokenup,
callback closedown )
00081 : _client( client )
00082 , _wokenup( wokenup )
00083 , _closedown( closedown )
00084 {
00085 }
00086
00087 virtual void wokenUp( )
00088 {
00089 (_client->*_wokenup)( );
00090 }
00091
00092 virtual void closedDown( )
00093 {
00094 (_client->*_closedown)( );
00095 }
00096 };
00097
00098
#endif
00099