00001
00002
#include "wvautoconf.h"
00003
00004
#ifdef WITH_FAM
00005
00006
#ifndef __WVFAM_H
00007
#define __WVFAM_H
00008
00009
#include "wvfdstream.h"
00010
#include "wvlog.h"
00011
#include "wvscatterhash.h"
00012
00013
#include <fam.h>
00014
00015
enum WvFamEvent
00016 {
00017 WvFamChanged = 1,
00018 WvFamDeleted = 2,
00019 WvFamCreated = 5,
00020 };
00021
00022
typedef WvCallback<void, WvStringParm, WvFamEvent, bool> WvFamCallback;
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
class WvFamBase
00036 {
00037
public:
00038
00039
00040
00041
00042
00043
00044
int _monitordir(
WvString *dir);
00045
int _monitorfile(
WvString *file);
00046
void _unmonitor(
int reqid);
00047
00048
protected:
00049 FAMConnection fc;
00050 FAMRequest fr;
00051 FAMEvent fe;
00052 WvFamCallback cb;
00053
00054
WvFDStream *s;
00055
WvLog log;
00056
00057
void callback(
WvStream &,
void *) { _callback(); }
00058
void _callback();
00059
00060
00061
public:
00062 WvFamBase() : s(0),
log("WvFAM") { setup(); }
00063 WvFamBase(WvFamCallback _cb) : cb(_cb), s(0),
log("WvFam") { setup(); }
00064 ~WvFamBase() { close(); }
00065
00066
void setup();
00067
00068
00069
00070
00071
00072
void close();
00073
00074
static bool fam_ok();
00075
00076
bool isok() const;
00077
00078
void setcallback(WvFamCallback _cb)
00079 { cb = _cb; }
00080 };
00081
00082
00083
00084
00085
00086
00087
00088
class WvFam :
public WvFamBase
00089 {
00090
public:
00091 WvFam() { }
00092 WvFam(WvFamCallback _cb) : WvFamBase(_cb) { }
00093
00094
void monitordir(
WvStringParm dir);
00095
void monitorfile(
WvStringParm file);
00096
void monitor(
WvStringParm path);
00097
void unmonitor(
WvStringParm path);
00098
00099
protected:
00100
typedef WvMapPair<WvString, int> WvFamReq;
00101
DeclareWvScatterDict2(WvFamReqDict, WvFamReq,
WvString, key);
00102 WvFamReqDict reqs;
00103 };
00104
00105
00106
#endif //__WVFAM_H
00107
#endif //__WITH_FAM