ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/trunk/src/event.c
Revision: 4125
Committed: Tue Jul 1 17:43:47 2014 UTC (12 years, 3 months ago) by michael
Content type: text/x-csrc
File size: 2785 byte(s)
Log Message:
- event.c: removed unused header includes

File Contents

# User Rev Content
1 adx 30 /*
2     * ircd-hybrid: an advanced Internet Relay Chat Daemon(ircd).
3     * event.c: Event functions.
4     *
5 michael 2916 * Copyright (c) 1998-2000 Regents of the University of California
6     * Copyright (c) 2000-2014 ircd-hybrid development team
7 adx 30 *
8 knight 31 * $Id$
9 adx 30 */
10    
11     #include "stdinc.h"
12 michael 1011 #include "list.h"
13 adx 30 #include "ircd.h"
14     #include "event.h"
15     #include "client.h"
16     #include "send.h"
17     #include "numeric.h"
18 michael 2680 #include "rng_mt.h"
19 adx 30
20 michael 4094 static dlink_list events;
21 michael 2680
22 michael 4094 void
23     event_add(struct event *ev, void *data)
24     {
25     dlink_node *node;
26 adx 30
27 michael 4094 event_delete(ev);
28 michael 3599
29 michael 4094 ev->data = data;
30     ev->next = CurrentTime + ev->when;
31     ev->enabled = 1;
32 michael 3599
33 michael 4094 DLINK_FOREACH(node, events.head)
34     {
35     struct event *e = node->data;
36 michael 3599
37 michael 4094 if (e->next > ev->next)
38 adx 30 {
39 michael 4094 dlinkAddBefore(node, ev, &ev->node, &events);
40 adx 30 return;
41     }
42     }
43    
44 michael 4094 dlinkAddTail(ev, &ev->node, &events);
45 adx 30 }
46    
47     void
48 michael 4094 event_addish(struct event *ev, void *data)
49 adx 30 {
50 michael 4094 if (ev->when >= 3)
51 adx 30 {
52 michael 4094 const time_t two_third = (2 * ev->when) / 3;
53     ev->when = two_third + ((genrand_int32() % 1000) * two_third) / 1000;
54 adx 30 /*
55     * XXX I hate the above magic, I don't even know if its right.
56     * Grr. -- adrian
57     */
58     }
59    
60 michael 4094 event_add(ev, data);
61 adx 30 }
62    
63     void
64 michael 4094 event_delete(struct event *ev)
65 adx 30 {
66 michael 4094 if (!ev->enabled)
67     return;
68    
69     dlinkDelete(&ev->node, &events);
70     ev->enabled = 0;
71 adx 30 }
72    
73 michael 4094 void
74     event_run(void)
75 adx 30 {
76 michael 4094 static time_t last = 0;
77 michael 4118 unsigned int len = 0;
78 adx 30
79 michael 4094 if (last == CurrentTime)
80     return;
81     last = CurrentTime;
82    
83     len = dlink_list_length(&events);
84     while (len-- && dlink_list_length(&events))
85     {
86     struct event *e = events.head->data;
87    
88 michael 4099 if (e->next > CurrentTime)
89 michael 4094 break;
90    
91     event_delete(e);
92    
93     e->handler(e->data);
94    
95     if (!e->oneshot)
96     event_add(e, e->data);
97     }
98 adx 30 }
99    
100     /*
101 michael 4094 * void set_back_events(time_t by)
102     * Input: Time to set back events by.
103     * Output: None.
104     * Side-effects: Sets back all events by "by" seconds.
105 adx 30 */
106     void
107 michael 4094 set_back_events(time_t by)
108 adx 30 {
109 michael 4094 dlink_node *node;
110    
111     DLINK_FOREACH(node, events.head)
112     {
113     struct event *ev = node->data;
114     ev->next -= by;
115     }
116 adx 30 }
117    
118     /*
119     * void show_events(struct Client *source_p)
120     *
121     * Input: Client requesting the event
122     * Output: List of events
123     * Side Effects: None
124     */
125     void
126     show_events(struct Client *source_p)
127     {
128 michael 4094 const dlink_node *node;
129 adx 30
130 michael 3589 sendto_one_numeric(source_p, &me, RPL_STATSDEBUG|SND_EXPLICIT,
131     "E :Operation Next Execution");
132     sendto_one_numeric(source_p, &me, RPL_STATSDEBUG|SND_EXPLICIT,
133     "E :-------------------------------------------");
134 adx 30
135 michael 4094 DLINK_FOREACH(node, events.head)
136     {
137     const struct event *ev = node->data;
138 adx 30
139 michael 4094 sendto_one_numeric(source_p, &me, RPL_STATSDEBUG|SND_EXPLICIT,
140     "E :%-28s %-4d seconds",
141     ev->name,
142     (int)(ev->next - CurrentTime));
143 adx 30 }
144     }
145 michael 4094

Properties

Name Value
svn:eol-style native
svn:keywords Id Revision