qmsk/net/lib/event2/event.pxd
author Tero Marttila <terom@fixme.fi>
Sat, 26 Sep 2009 23:51:31 +0300
changeset 57 8c4032265c8c
parent 52 722fc70a197a
permissions -rw-r--r--
event keeps a ref to its event_base - needed for later error propagation, and to ensure method calls remain valid
39
075eaafa80a7 initial lib.event2 code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     1
"""
075eaafa80a7 initial lib.event2 code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     2
    Core `struct event` type.
075eaafa80a7 initial lib.event2 code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     3
"""
075eaafa80a7 initial lib.event2 code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     4
075eaafa80a7 initial lib.event2 code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     5
cimport qmsk.net.lib.event2.lib as lib
075eaafa80a7 initial lib.event2 code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     6
57
8c4032265c8c event keeps a ref to its event_base - needed for later error propagation, and to ensure method calls remain valid
Tero Marttila <terom@fixme.fi>
parents: 52
diff changeset
     7
from qmsk.net.lib.event2.base cimport event_base
8c4032265c8c event keeps a ref to its event_base - needed for later error propagation, and to ensure method calls remain valid
Tero Marttila <terom@fixme.fi>
parents: 52
diff changeset
     8
39
075eaafa80a7 initial lib.event2 code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
     9
# internal helper method for handling timeout arguments
075eaafa80a7 initial lib.event2 code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    10
cdef lib.timeval* build_timeout (lib.timeval *tv, object timeout = ?) except? <lib.timeval *>-1
075eaafa80a7 initial lib.event2 code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    11
075eaafa80a7 initial lib.event2 code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    12
cdef class event :
075eaafa80a7 initial lib.event2 code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    13
    """
075eaafa80a7 initial lib.event2 code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    14
        Create a new event object with the given parameters.
075eaafa80a7 initial lib.event2 code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    15
        
075eaafa80a7 initial lib.event2 code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    16
        An event tracks a single OS file descriptor with some set of events (EV_READ/EV_WRITE) and an optional timeout.
075eaafa80a7 initial lib.event2 code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    17
        
075eaafa80a7 initial lib.event2 code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    18
        An event is associated with some event_base, which handles the event mechanism.
075eaafa80a7 initial lib.event2 code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    19
        
075eaafa80a7 initial lib.event2 code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    20
        Arguments:
075eaafa80a7 initial lib.event2 code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    21
            base        - event_base to use for this event
075eaafa80a7 initial lib.event2 code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    22
            fd          - OS file descriptor to watch, or -1
075eaafa80a7 initial lib.event2 code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    23
            events      - bitmask of EV_* flags that represents the events to wait for
075eaafa80a7 initial lib.event2 code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    24
50
da394bb715af try and keep lib.event2.event objects alive (via self-ref) while pending
Tero Marttila <terom@fixme.fi>
parents: 41
diff changeset
    25
        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
    26
da394bb715af try and keep lib.event2.event objects alive (via self-ref) while pending
Tero Marttila <terom@fixme.fi>
parents: 41
diff changeset
    27
        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
    28
        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
    29
        before the __call__().
52
722fc70a197a change CallbackEvent to replace fd with ev, event2 doc/style tweaks
Tero Marttila <terom@fixme.fi>
parents: 50
diff changeset
    30
722fc70a197a change CallbackEvent to replace fd with ev, event2 doc/style tweaks
Tero Marttila <terom@fixme.fi>
parents: 50
diff changeset
    31
        XXX: propagate errors (including e.g. KeyboardInterrupt?) from __call__ to event_base.loop()?
39
075eaafa80a7 initial lib.event2 code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    32
    """
075eaafa80a7 initial lib.event2 code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    33
57
8c4032265c8c event keeps a ref to its event_base - needed for later error propagation, and to ensure method calls remain valid
Tero Marttila <terom@fixme.fi>
parents: 52
diff changeset
    34
    # reference to our supporting event_base to ensure we don't lose it
8c4032265c8c event keeps a ref to its event_base - needed for later error propagation, and to ensure method calls remain valid
Tero Marttila <terom@fixme.fi>
parents: 52
diff changeset
    35
    cdef readonly event_base base
8c4032265c8c event keeps a ref to its event_base - needed for later error propagation, and to ensure method calls remain valid
Tero Marttila <terom@fixme.fi>
parents: 52
diff changeset
    36
39
075eaafa80a7 initial lib.event2 code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    37
    # the underlying event object
075eaafa80a7 initial lib.event2 code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    38
    cdef lib.event *ev
075eaafa80a7 initial lib.event2 code
Tero Marttila <terom@fixme.fi>
parents:
diff changeset
    39
50
da394bb715af try and keep lib.event2.event objects alive (via self-ref) while pending
Tero Marttila <terom@fixme.fi>
parents: 41
diff changeset
    40
    # 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
    41
    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
    42
da394bb715af try and keep lib.event2.event objects alive (via self-ref) while pending
Tero Marttila <terom@fixme.fi>
parents: 41
diff changeset
    43
    # 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
    44
    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
    45
    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
    46
    
da394bb715af try and keep lib.event2.event objects alive (via self-ref) while pending
Tero Marttila <terom@fixme.fi>
parents: 41
diff changeset
    47
    # 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
    48
    cpdef pending (self, short mask = ?)