equal
deleted
inserted
replaced
51 # libevent seems to segfault otherwise... |
51 # libevent seems to segfault otherwise... |
52 if events & (lib.EV_READ | lib.EV_WRITE) and fd < 0 : |
52 if events & (lib.EV_READ | lib.EV_WRITE) and fd < 0 : |
53 raise ValueError(fd) |
53 raise ValueError(fd) |
54 |
54 |
55 # construct event using our internal callback, with self as the arg |
55 # construct event using our internal callback, with self as the arg |
56 self.ev = lib.event_new(base.ev_base, fd, events, ev_callback, <void *>self) |
56 self.ev = lib.event_new(base.ev_base, fd, events, ev_callback, <void *> self) |
57 |
57 |
58 if self.ev == NULL : |
58 if self.ev == NULL : |
59 raise Exception("event_new") |
59 raise Exception("event_new") |
60 |
60 |
61 |
61 |
68 |
68 |
69 if self.alive : |
69 if self.alive : |
70 raise RuntimeError("Cannot change event while active") |
70 raise RuntimeError("Cannot change event while active") |
71 |
71 |
72 # interesting... no error return code |
72 # interesting... no error return code |
73 lib.event_assign(self.ev, base.ev_base, fd, events, ev_callback, <void *>self) |
73 lib.event_assign(self.ev, base.ev_base, fd, events, ev_callback, <void *> self) |
74 |
74 |
75 |
75 |
76 def add (self, timeout = None) : |
76 def add (self, timeout = None) : |
77 """ |
77 """ |
78 Add this event to our event_base's set of monitored events. |
78 Add this event to our event_base's set of monitored events. |
195 lib.event_free(self.ev) |
195 lib.event_free(self.ev) |
196 |
196 |
197 class CallbackEvent (event) : |
197 class CallbackEvent (event) : |
198 """ |
198 """ |
199 Extends the event type to take a callback and additional arguments to invoke from the __call__ method. |
199 Extends the event type to take a callback and additional arguments to invoke from the __call__ method. |
|
200 |
|
201 This will pass the event object itself to the callback in place of the fd. |
200 """ |
202 """ |
201 |
203 |
202 def __init__ (self, event_base base, lib.evutil_socket_t fd, short events, object callback, *args, **kwargs) : |
204 def __init__ (self, event_base base, lib.evutil_socket_t fd, short events, object callback, *args, **kwargs) : |
203 # parent |
205 # parent |
204 super(CallbackEvent, self).__init__(base, fd, events) |
206 super(CallbackEvent, self).__init__(base, fd, events) |
207 self.callback = callback |
209 self.callback = callback |
208 self.args = args |
210 self.args = args |
209 self.kwargs = kwargs |
211 self.kwargs = kwargs |
210 |
212 |
211 def __call__ (self, lib.evutil_socket_t fd, short mask) : |
213 def __call__ (self, lib.evutil_socket_t fd, short mask) : |
212 self.callback(fd, mask, *self.args, **self.kwargs) |
214 self.callback(self, mask, *self.args, **self.kwargs) |
213 |
215 |