ViewVC Help
View File | Revision Log | Show Annotations | View Changeset | Root Listing
root/svn/ircd-hybrid/trunk/src/event.c
Revision: 4126
Committed: Tue Jul 1 19:24:16 2014 UTC (11 years, 1 month ago) by michael
Content type: text/x-csrc
File size: 2674 byte(s)
Log Message:
- event.c:event_addish(): removed XXX

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 michael 4126
54 michael 4094 ev->when = two_third + ((genrand_int32() % 1000) * two_third) / 1000;
55 adx 30 }
56    
57 michael 4094 event_add(ev, data);
58 adx 30 }
59    
60     void
61 michael 4094 event_delete(struct event *ev)
62 adx 30 {
63 michael 4094 if (!ev->enabled)
64     return;
65    
66     dlinkDelete(&ev->node, &events);
67     ev->enabled = 0;
68 adx 30 }
69    
70 michael 4094 void
71     event_run(void)
72 adx 30 {
73 michael 4094 static time_t last = 0;
74 michael 4118 unsigned int len = 0;
75 adx 30
76 michael 4094 if (last == CurrentTime)
77     return;
78     last = CurrentTime;
79    
80     len = dlink_list_length(&events);
81     while (len-- && dlink_list_length(&events))
82     {
83     struct event *e = events.head->data;
84    
85 michael 4099 if (e->next > CurrentTime)
86 michael 4094 break;
87    
88     event_delete(e);
89    
90     e->handler(e->data);
91    
92     if (!e->oneshot)
93     event_add(e, e->data);
94     }
95 adx 30 }
96    
97     /*
98 michael 4094 * void set_back_events(time_t by)
99     * Input: Time to set back events by.
100     * Output: None.
101     * Side-effects: Sets back all events by "by" seconds.
102 adx 30 */
103     void
104 michael 4094 set_back_events(time_t by)
105 adx 30 {
106 michael 4094 dlink_node *node;
107    
108     DLINK_FOREACH(node, events.head)
109     {
110     struct event *ev = node->data;
111     ev->next -= by;
112     }
113 adx 30 }
114    
115     /*
116     * void show_events(struct Client *source_p)
117     *
118     * Input: Client requesting the event
119     * Output: List of events
120     * Side Effects: None
121     */
122     void
123     show_events(struct Client *source_p)
124     {
125 michael 4094 const dlink_node *node;
126 adx 30
127 michael 3589 sendto_one_numeric(source_p, &me, RPL_STATSDEBUG|SND_EXPLICIT,
128     "E :Operation Next Execution");
129     sendto_one_numeric(source_p, &me, RPL_STATSDEBUG|SND_EXPLICIT,
130     "E :-------------------------------------------");
131 adx 30
132 michael 4094 DLINK_FOREACH(node, events.head)
133     {
134     const struct event *ev = node->data;
135 adx 30
136 michael 4094 sendto_one_numeric(source_p, &me, RPL_STATSDEBUG|SND_EXPLICIT,
137     "E :%-28s %-4d seconds",
138     ev->name,
139     (int)(ev->next - CurrentTime));
140 adx 30 }
141     }
142 michael 4094

Properties

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