~certify-web-dev/twisted/certify-trunk

« back to all changes in this revision

Viewing changes to twisted/internet/cfsupport/cfrunloop.pxi

  • Committer: Bazaar Package Importer
  • Author(s): Matthias Klose
  • Date: 2004-06-21 22:01:11 UTC
  • mto: (2.2.3 sid)
  • mto: This revision was merged to the branch mainline in revision 3.
  • Revision ID: james.westby@ubuntu.com-20040621220111-vkf909euqnyrp3nr
Tags: upstream-1.3.0
ImportĀ upstreamĀ versionĀ 1.3.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
import _CarbonEvt
 
2
 
 
3
# possibly figure out how to subclass these or something
 
4
 
 
5
cdef class PyCFRunLoopTimer:
 
6
    cdef CFRunLoopTimerRef cf
 
7
    cdef public object callout
 
8
    cdef CFRunLoopTimerContext context
 
9
 
 
10
    def __new__(self, double fireDate, double interval, callout):
 
11
        self.callout = callout
 
12
        self.context.version = 0
 
13
        self.context.info = <void *>self
 
14
        self.context.retain = NULL
 
15
        self.context.release = NULL
 
16
        self.context.copyDescription = NULL
 
17
        self.cf = CFRunLoopTimerCreate(kCFAllocatorDefault, fireDate, interval, 0, 0, <CFRunLoopTimerCallBack>&runLoopTimerCallBack, &self.context)
 
18
        if self.cf == NULL:
 
19
            raise ValueError("Invalid Socket")
 
20
        
 
21
    def getNextFireDate(self):
 
22
        return CFRunLoopTimerGetNextFireDate(self.cf)
 
23
 
 
24
    def setNextFireDate(self, double fireDate):
 
25
        CFRunLoopTimerSetNextFireDate(self.cf, fireDate)
 
26
 
 
27
    def invalidate(self):
 
28
        CFRunLoopTimerInvalidate(self.cf)
 
29
 
 
30
    def __dealloc__(self):
 
31
        if self.cf != NULL:
 
32
            CFRelease(self.cf)
 
33
 
 
34
cdef void runLoopTimerCallBack(CFRunLoopTimerRef timer, void *info):
 
35
    cdef PyCFRunLoopTimer obj
 
36
    obj = <PyCFRunLoopTimer>info
 
37
    if obj.callout:
 
38
        obj.callout()
 
39
 
 
40
cdef class PyCFRunLoop:
 
41
    cdef public object cf
 
42
 
 
43
    def __new__(self, runLoop=None):
 
44
        cdef CFTypeRef _runLoop
 
45
        cdef EventLoopRef _evtLoop
 
46
        if runLoop is None:
 
47
            _runLoop = CFRunLoopGetCurrent()
 
48
        elif isinstance(runLoop, _CarbonEvt.EventLoopRef):
 
49
            # XXX - I don't know how to get access to this
 
50
            #
 
51
            #if EventLoopRef_Convert(runLoop, &_evtLoop) == 0:
 
52
            #    return -1
 
53
            _evtLoop = GetCurrentEventLoop()
 
54
            _runLoop = GetCFRunLoopFromEventLoop(_evtLoop)
 
55
        else:
 
56
            if CFObj_Convert(runLoop, &_runLoop) == 0:
 
57
                raise
 
58
                #return -1
 
59
        self.cf = CFObj_New(CFRetain(_runLoop))
 
60
 
 
61
    def run(self):
 
62
        CFRunLoopRun()
 
63
 
 
64
    def stop(self):
 
65
        cdef CFTypeRef _runLoop
 
66
        if CFObj_Convert(self.cf, &_runLoop) == 0:
 
67
            raise ValueError, "CFRunLoopReference is invalid"
 
68
        CFRunLoopStop(_runLoop)
 
69
 
 
70
    def currentMode(self):
 
71
        cdef CFTypeRef _currentMode
 
72
        cdef CFTypeRef _runLoop
 
73
        if CFObj_Convert(self.cf, &_runLoop) == 0:
 
74
            raise ValueError, "CFRunLoopReference is invalid"
 
75
        _currentMode = CFRunLoopCopyCurrentMode(_runLoop)
 
76
        if _currentMode == NULL:
 
77
            return None
 
78
        return CFObj_New(_currentMode)
 
79
        
 
80
    def addSocket(self, PyCFSocket socket not None):
 
81
        cdef CFTypeRef _runLoop
 
82
        if CFObj_Convert(self.cf, &_runLoop) == 0:
 
83
            raise ValueError, "CFRunLoopReference is invalid"
 
84
        CFRunLoopAddSource(_runLoop, socket.source, kCFRunLoopCommonModes)
 
85
 
 
86
    def removeSocket(self, PyCFSocket socket not None):
 
87
        cdef CFTypeRef _runLoop
 
88
        if CFObj_Convert(self.cf, &_runLoop) == 0:
 
89
            raise ValueError, "CFRunLoopReference is invalid"
 
90
        CFRunLoopRemoveSource(_runLoop, socket.source, kCFRunLoopCommonModes)
 
91
 
 
92
    def addTimer(self, PyCFRunLoopTimer timer not None):
 
93
        cdef CFTypeRef _runLoop
 
94
        if CFObj_Convert(self.cf, &_runLoop) == 0:
 
95
            raise ValueError, "CFRunLoopReference is invalid"
 
96
        CFRunLoopAddTimer(_runLoop, timer.cf, kCFRunLoopCommonModes)
 
97
 
 
98
    def removeTimer(self, PyCFRunLoopTimer timer not None):
 
99
        cdef CFTypeRef _runLoop
 
100
        if CFObj_Convert(self.cf, &_runLoop) == 0:
 
101
            raise ValueError, "CFRunLoopReference is invalid"
 
102
        CFRunLoopRemoveTimer(_runLoop, timer.cf, kCFRunLoopCommonModes)