author | Tero Marttila <terom@fixme.fi> |
Sat, 26 Sep 2009 16:39:20 +0300 | |
changeset 50 | da394bb715af |
parent 41 | 02f7c0539843 |
child 52 | 722fc70a197a |
permissions | -rw-r--r-- |
39 | 1 |
""" |
2 |
Core `struct event` type. |
|
3 |
""" |
|
4 |
||
5 |
cimport qmsk.net.lib.event2.lib as lib |
|
6 |
||
7 |
# internal helper method for handling timeout arguments |
|
8 |
cdef lib.timeval* build_timeout (lib.timeval *tv, object timeout = ?) except? <lib.timeval *>-1 |
|
9 |
||
10 |
cdef class event : |
|
11 |
""" |
|
12 |
Create a new event object with the given parameters. |
|
13 |
||
14 |
An event tracks a single OS file descriptor with some set of events (EV_READ/EV_WRITE) and an optional timeout. |
|
15 |
||
16 |
An event is associated with some event_base, which handles the event mechanism. |
|
17 |
||
18 |
Arguments: |
|
19 |
base - event_base to use for this event |
|
20 |
fd - OS file descriptor to watch, or -1 |
|
21 |
events - bitmask of EV_* flags that represents the events to wait for |
|
22 |
||
50
da394bb715af
try and keep lib.event2.event objects alive (via self-ref) while pending
Tero Marttila <terom@fixme.fi>
parents:
41
diff
changeset
|
23 |
When the event fires, it will "call" this event object (see docs for __call__()). |
da394bb715af
try and keep lib.event2.event objects alive (via self-ref) while pending
Tero Marttila <terom@fixme.fi>
parents:
41
diff
changeset
|
24 |
|
da394bb715af
try and keep lib.event2.event objects alive (via self-ref) while pending
Tero Marttila <terom@fixme.fi>
parents:
41
diff
changeset
|
25 |
The lifetime of event objects is slightly non-trivial, in that they will actually hold a reference to |
da394bb715af
try and keep lib.event2.event objects alive (via self-ref) while pending
Tero Marttila <terom@fixme.fi>
parents:
41
diff
changeset
|
26 |
themselves while "active". In other words, .add() will aquire an internal reference, which will be released |
da394bb715af
try and keep lib.event2.event objects alive (via self-ref) while pending
Tero Marttila <terom@fixme.fi>
parents:
41
diff
changeset
|
27 |
before the __call__(). |
39 | 28 |
""" |
29 |
||
30 |
# the underlying event object |
|
31 |
cdef lib.event *ev |
|
32 |
||
50
da394bb715af
try and keep lib.event2.event objects alive (via self-ref) while pending
Tero Marttila <terom@fixme.fi>
parents:
41
diff
changeset
|
33 |
# slightly different meaning from libevent's "active", this is used to track our own refcount |
da394bb715af
try and keep lib.event2.event objects alive (via self-ref) while pending
Tero Marttila <terom@fixme.fi>
parents:
41
diff
changeset
|
34 |
cdef readonly bool alive |
da394bb715af
try and keep lib.event2.event objects alive (via self-ref) while pending
Tero Marttila <terom@fixme.fi>
parents:
41
diff
changeset
|
35 |
|
da394bb715af
try and keep lib.event2.event objects alive (via self-ref) while pending
Tero Marttila <terom@fixme.fi>
parents:
41
diff
changeset
|
36 |
# self-refcount scheme |
da394bb715af
try and keep lib.event2.event objects alive (via self-ref) while pending
Tero Marttila <terom@fixme.fi>
parents:
41
diff
changeset
|
37 |
cdef object _mark (self) |
da394bb715af
try and keep lib.event2.event objects alive (via self-ref) while pending
Tero Marttila <terom@fixme.fi>
parents:
41
diff
changeset
|
38 |
cdef object _unmark (self) |
da394bb715af
try and keep lib.event2.event objects alive (via self-ref) while pending
Tero Marttila <terom@fixme.fi>
parents:
41
diff
changeset
|
39 |
|
da394bb715af
try and keep lib.event2.event objects alive (via self-ref) while pending
Tero Marttila <terom@fixme.fi>
parents:
41
diff
changeset
|
40 |
# methods also used internally |
da394bb715af
try and keep lib.event2.event objects alive (via self-ref) while pending
Tero Marttila <terom@fixme.fi>
parents:
41
diff
changeset
|
41 |
cpdef pending (self, short mask = ?) |