uasyncio: Add minimum esp8266 support

pull/141/head
Daniel Mizyrycki 2016-12-25 17:22:55 -08:00
rodzic 6256ad69c0
commit 0f5d5cead7
2 zmienionych plików z 28 dodań i 28 usunięć

Wyświetl plik

@ -93,16 +93,16 @@ class EventLoop:
# self.add_reader(ret.obj.fileno(), lambda self, c, f: self.call_soon(c, f), self, cb, ret.obj)
# self.add_reader(ret.obj.fileno(), lambda c, f: self.call_soon(c, f), cb, ret.obj)
# self.add_reader(arg.fileno(), lambda cb: self.call_soon(cb), cb)
self.add_reader(arg.fileno(), cb)
self.add_reader(arg, cb)
continue
elif isinstance(ret, IOWrite):
# self.add_writer(arg.fileno(), lambda cb: self.call_soon(cb), cb)
self.add_writer(arg.fileno(), cb)
self.add_writer(arg, cb)
continue
elif isinstance(ret, IOReadDone):
self.remove_reader(arg.fileno())
self.remove_reader(arg)
elif isinstance(ret, IOWriteDone):
self.remove_writer(arg.fileno())
self.remove_writer(arg)
elif isinstance(ret, StopLoop):
return arg
else:

Wyświetl plik

@ -11,42 +11,42 @@ class EpollEventLoop(EventLoop):
self.poller = select.poll()
self.objmap = {}
def add_reader(self, fd, cb, *args):
def add_reader(self, sock, cb, *args):
if DEBUG and __debug__:
log.debug("add_reader%s", (fd, cb, args))
log.debug("add_reader%s", (sock, cb, args))
if args:
self.poller.register(fd, select.POLLIN)
self.objmap[fd] = (cb, args)
self.poller.register(sock, select.POLLIN)
self.objmap[id(sock)] = (cb, args)
else:
self.poller.register(fd, select.POLLIN)
self.objmap[fd] = cb
self.poller.register(sock, select.POLLIN)
self.objmap[id(sock)] = cb
def remove_reader(self, fd):
def remove_reader(self, sock):
if DEBUG and __debug__:
log.debug("remove_reader(%s)", fd)
self.poller.unregister(fd)
del self.objmap[fd]
log.debug("remove_reader(%s)", sock)
self.poller.unregister(sock)
del self.objmap[id(sock)]
def add_writer(self, fd, cb, *args):
def add_writer(self, sock, cb, *args):
if DEBUG and __debug__:
log.debug("add_writer%s", (fd, cb, args))
log.debug("add_writer%s", (sock, cb, args))
if args:
self.poller.register(fd, select.POLLOUT)
self.objmap[fd] = (cb, args)
self.poller.register(sock, select.POLLOUT)
self.objmap[id(sock)] = (cb, args)
else:
self.poller.register(fd, select.POLLOUT)
self.objmap[fd] = cb
self.poller.register(sock, select.POLLOUT)
self.objmap[id(sock)] = cb
def remove_writer(self, fd):
def remove_writer(self, sock):
if DEBUG and __debug__:
log.debug("remove_writer(%s)", fd)
log.debug("remove_writer(%s)", sock)
try:
self.poller.unregister(fd)
self.objmap.pop(fd, None)
self.poller.unregister(sock)
self.objmap.pop(id(sock), None)
except OSError as e:
# StreamWriter.awrite() first tries to write to an fd,
# StreamWriter.awrite() first tries to write to a socket,
# and if that succeeds, yield IOWrite may never be called
# for that fd, and it will never be added to poller. So,
# for that socket, and it will never be added to poller. So,
# ignore such error.
if e.args[0] != errno.ENOENT:
raise
@ -63,8 +63,8 @@ class EpollEventLoop(EventLoop):
# Remove "if res" workaround after
# https://github.com/micropython/micropython/issues/2716 fixed.
if res:
for fd, ev in res:
cb = self.objmap[fd]
for sock, ev in res:
cb = self.objmap[id(sock)]
if DEBUG and __debug__:
log.debug("Calling IO callback: %r", cb)
if isinstance(cb, tuple):