4
4
from uasyncio .core import *
5
5
from sys import platform
6
6
7
- class ObjMap (dict ):
8
- @staticmethod
9
- def sock_fd (sock_ref ):
10
- # Compute socket file descriptor replacement for esp8266
11
- # sock_ref is a fd in most systems. esp8266 uses sockets instead
12
- if isinstance (sock_ref , int ):
13
- return sock_ref
14
- return sock_ref .fileno () if platform != 'esp8266' else id (sock_ref )
15
- def __getitem__ (self , key ):
16
- return super ().__getitem__ (self .sock_fd (key ))
17
- def __setitem__ (self , key , value ):
18
- super ().__setitem__ (self .sock_fd (key ), value )
19
- def __delitem__ (self , key ):
20
- return super ().__delitem__ (self .sock_fd (key ))
21
- def __contains__ (self , key ):
22
- return True if self .sock_fd (key ) in self .keys () else False
7
+ def sock_fd (sock_ref ):
8
+ # Compute socket file descriptor replacement for esp8266
9
+ # sock_ref is a fd in most systems. esp8266 uses sockets instead
10
+ if isinstance (sock_ref , int ):
11
+ return sock_ref
12
+ return sock_ref .fileno () if platform != 'esp8266' else id (sock_ref )
23
13
24
14
25
15
class EpollEventLoop (EventLoop ):
26
16
27
17
def __init__ (self ):
28
18
EventLoop .__init__ (self )
29
19
self .poller = select .poll ()
30
- self .objmap = ObjMap ()
20
+ self .objmap = {}
31
21
32
22
def add_reader (self , fd , cb , * args ):
33
23
if __debug__ :
34
24
log .debug ("add_reader%s" , (fd , cb , args ))
35
25
if args :
36
26
self .poller .register (fd , select .POLLIN )
37
- self .objmap [fd ] = (cb , args )
27
+ self .objmap [sock_fd ( fd ) ] = (cb , args )
38
28
else :
39
29
self .poller .register (fd , select .POLLIN )
40
- self .objmap [fd ] = cb
30
+ self .objmap [sock_fd ( fd ) ] = cb
41
31
42
32
def remove_reader (self , fd ):
43
33
if __debug__ :
44
34
log .debug ("remove_reader(%s)" , fd )
45
35
self .poller .unregister (fd )
46
- del self .objmap [fd ]
36
+ del self .objmap [sock_fd ( fd ) ]
47
37
48
38
def add_writer (self , fd , cb , * args ):
49
39
if __debug__ :
50
40
log .debug ("add_writer%s" , (fd , cb , args ))
51
41
if args :
52
42
self .poller .register (fd , select .POLLOUT )
53
- self .objmap [fd ] = (cb , args )
43
+ self .objmap [sock_fd ( fd ) ] = (cb , args )
54
44
else :
55
45
self .poller .register (fd , select .POLLOUT )
56
- self .objmap [fd ] = cb
46
+ self .objmap [sock_fd ( fd ) ] = cb
57
47
58
48
def remove_writer (self , fd ):
59
49
if __debug__ :
60
50
log .debug ("remove_writer(%s)" , fd )
61
51
try :
62
52
self .poller .unregister (fd )
63
- if fd in self .objmap :
64
- del self .objmap [fd ]
53
+ self .objmap .pop (sock_fd (fd ), None )
65
54
except OSError as e :
66
55
# StreamWriter.awrite() first tries to write to an fd,
67
56
# and if that succeeds, yield IOWrite may never be called
@@ -80,7 +69,7 @@ def wait(self, delay):
80
69
res = self .poller .poll (delay , 1 )
81
70
#log.debug("epoll result: %s", res)
82
71
for fd , ev in res :
83
- cb = self .objmap [fd ]
72
+ cb = self .objmap [sock_fd ( fd ) ]
84
73
if __debug__ :
85
74
log .debug ("Calling IO callback: %r" , cb )
86
75
if isinstance (cb , tuple ):
0 commit comments