]> git.ipfire.org Git - thirdparty/squid.git/blame - src/event.h
Create an explicit EventLoop class which can be used to run an event loop
[thirdparty/squid.git] / src / event.h
CommitLineData
a553a5a3 1
2/*
3 * $Id: event.h,v 1.1 2006/08/07 02:28:22 robertc Exp $
4 *
5 *
6 * SQUID Web Proxy Cache http://www.squid-cache.org/
7 * ----------------------------------------------------------
8 *
9 * Squid is the result of efforts by numerous individuals from
10 * the Internet community; see the CONTRIBUTORS file for full
11 * details. Many organizations have provided support for Squid's
12 * development; see the SPONSORS file for full details. Squid is
13 * Copyrighted (C) 2001 by the Regents of the University of
14 * California; see the COPYRIGHT file for full details. Squid
15 * incorporates software developed and/or copyrighted by other
16 * sources; see the CREDITS file for full details.
17 *
18 * This program is free software; you can redistribute it and/or modify
19 * it under the terms of the GNU General Public License as published by
20 * the Free Software Foundation; either version 2 of the License, or
21 * (at your option) any later version.
22 *
23 * This program is distributed in the hope that it will be useful,
24 * but WITHOUT ANY WARRANTY; without even the implied warranty of
25 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 * GNU General Public License for more details.
27 *
28 * You should have received a copy of the GNU General Public License
29 * along with this program; if not, write to the Free Software
30 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA.
31 *
32 */
33
34#ifndef SQUID_EVENT_H
35#define SQUID_EVENT_H
36
37#include "squid.h"
38#include "Array.h"
39#include "CompletionDispatcher.h"
40
41/* forward decls */
42
43class StoreEntry;
44
45/* event scheduling facilities - run a callback after a given time period. */
46
47typedef void EVH(void *);
48
49extern void eventAdd(const char *name, EVH * func, void *arg, double when, int, bool cbdata=true);
50SQUIDCEXTERN void eventAddIsh(const char *name, EVH * func, void *arg, double delta_ish, int);
51SQUIDCEXTERN void eventDelete(EVH * func, void *arg);
52SQUIDCEXTERN void eventInit(CacheManager &);
53SQUIDCEXTERN void eventFreeMemory(void);
54SQUIDCEXTERN int eventFind(EVH *, void *);
55
56class ev_entry
57{
58
59public:
60 ev_entry(char const * name, EVH * func, void *arg, double when, int weight, bool cbdata=true);
61 MEMPROXY_CLASS(ev_entry);
62 const char *name;
63 EVH *func;
64 void *arg;
65 double when;
66
67 int weight;
68 bool cbdata;
69
70 struct ev_entry *next;
71};
72
73MEMPROXY_CLASS_INLINE(ev_entry);
74
75class EventDispatcher : public CompletionDispatcher
76{
77
78public:
79 EventDispatcher();
80 /* add an event to dequeue when dispatch is called */
81
82 void add
83 (ev_entry *);
84
85 /* add an event to be dispatched in the future */
86 void add
87 (const char *name, EVH * func, void *arg, double when, int, bool cbdata=true);
88
89 void dispatch();
90
91 static EventDispatcher *GetInstance();
92
93private:
94 Vector<ev_entry *> queue;
95
96 static EventDispatcher _instance;
97};
98
99class EventScheduler
100{
101
102public:
103 /* Create an event scheduler that will hand its ready to run callbacks to
104 * an EventDispatcher */
105 EventScheduler(EventDispatcher *);
106 ~EventScheduler();
107 /* cancel a scheduled but not dispatched event */
108 void cancel(EVH * func, void * arg);
109 /* clean up the used memory in the scheduler */
110 void clean();
111 /* how long until the next event ? */
112 int checkDelay();
113 /* cache manager output for the event queue */
114 void dump(StoreEntry *);
115 /* find a scheduled event */
116 bool find(EVH * func, void * arg);
117 /* schedule a callback function to run in when seconds */
118 void schedule(const char *name, EVH * func, void *arg, double when, int weight, bool cbdata=true);
119 int checkEvents();
120 static EventScheduler *GetInstance();
121
122private:
123 static EventScheduler _instance;
124 EventDispatcher * dispatcher;
125 ev_entry * tasks;
126};
127
128#endif /* SQUID_EVENT_H */