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 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(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(), lambda cb: self.call_soon(cb), cb)
self.add_reader(arg.fileno(), cb) self.add_reader(arg, cb)
continue continue
elif isinstance(ret, IOWrite): elif isinstance(ret, IOWrite):
# self.add_writer(arg.fileno(), lambda cb: self.call_soon(cb), cb) # self.add_writer(arg.fileno(), lambda cb: self.call_soon(cb), cb)
self.add_writer(arg.fileno(), cb) self.add_writer(arg, cb)
continue continue
elif isinstance(ret, IOReadDone): elif isinstance(ret, IOReadDone):
self.remove_reader(arg.fileno()) self.remove_reader(arg)
elif isinstance(ret, IOWriteDone): elif isinstance(ret, IOWriteDone):
self.remove_writer(arg.fileno()) self.remove_writer(arg)
elif isinstance(ret, StopLoop): elif isinstance(ret, StopLoop):
return arg return arg
else: else:

Wyświetl plik

@ -11,42 +11,42 @@ class EpollEventLoop(EventLoop):
self.poller = select.poll() self.poller = select.poll()
self.objmap = {} self.objmap = {}
def add_reader(self, fd, cb, *args): def add_reader(self, sock, cb, *args):
if DEBUG and __debug__: if DEBUG and __debug__:
log.debug("add_reader%s", (fd, cb, args)) log.debug("add_reader%s", (sock, cb, args))
if args: if args:
self.poller.register(fd, select.POLLIN) self.poller.register(sock, select.POLLIN)
self.objmap[fd] = (cb, args) self.objmap[id(sock)] = (cb, args)
else: else:
self.poller.register(fd, select.POLLIN) self.poller.register(sock, select.POLLIN)
self.objmap[fd] = cb self.objmap[id(sock)] = cb
def remove_reader(self, fd): def remove_reader(self, sock):
if DEBUG and __debug__: if DEBUG and __debug__:
log.debug("remove_reader(%s)", fd) log.debug("remove_reader(%s)", sock)
self.poller.unregister(fd) self.poller.unregister(sock)
del self.objmap[fd] del self.objmap[id(sock)]
def add_writer(self, fd, cb, *args): def add_writer(self, sock, cb, *args):
if DEBUG and __debug__: if DEBUG and __debug__:
log.debug("add_writer%s", (fd, cb, args)) log.debug("add_writer%s", (sock, cb, args))
if args: if args:
self.poller.register(fd, select.POLLOUT) self.poller.register(sock, select.POLLOUT)
self.objmap[fd] = (cb, args) self.objmap[id(sock)] = (cb, args)
else: else:
self.poller.register(fd, select.POLLOUT) self.poller.register(sock, select.POLLOUT)
self.objmap[fd] = cb self.objmap[id(sock)] = cb
def remove_writer(self, fd): def remove_writer(self, sock):
if DEBUG and __debug__: if DEBUG and __debug__:
log.debug("remove_writer(%s)", fd) log.debug("remove_writer(%s)", sock)
try: try:
self.poller.unregister(fd) self.poller.unregister(sock)
self.objmap.pop(fd, None) self.objmap.pop(id(sock), None)
except OSError as e: 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 # 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. # ignore such error.
if e.args[0] != errno.ENOENT: if e.args[0] != errno.ENOENT:
raise raise
@ -63,8 +63,8 @@ class EpollEventLoop(EventLoop):
# Remove "if res" workaround after # Remove "if res" workaround after
# https://github.com/micropython/micropython/issues/2716 fixed. # https://github.com/micropython/micropython/issues/2716 fixed.
if res: if res:
for fd, ev in res: for sock, ev in res:
cb = self.objmap[fd] cb = self.objmap[id(sock)]
if DEBUG and __debug__: if DEBUG and __debug__:
log.debug("Calling IO callback: %r", cb) log.debug("Calling IO callback: %r", cb)
if isinstance(cb, tuple): if isinstance(cb, tuple):