X-Git-Url: https://git.distorted.org.uk/~mdw/tripe/blobdiff_plain/690a6ec147f76213263b58a8a7fd82b28dde349a..76a24ae6cece0604e3155b628622a4b425cb77f3:/mon/tripemon.in diff --git a/mon/tripemon.in b/mon/tripemon.in index b898ec98..4b8dd24f 100644 --- a/mon/tripemon.in +++ b/mon/tripemon.in @@ -83,13 +83,15 @@ def invoker(func, *args, **kw): def cr(func, *args, **kw): """Return a function which invokes FUNC(*ARGS, **KW) in a coroutine.""" - def _(*hunoz, **hukairz): - T.Coroutine(xwrap(func)).switch(*args, **kw) - return _ + name = T.funargstr(func, args, kw) + return lambda *hunoz, **hukairz: \ + T.Coroutine(xwrap(func), name = name).switch(*args, **kw) def incr(func): """Decorator: runs its function in a coroutine of its own.""" - return lambda *args, **kw: T.Coroutine(func).switch(*args, **kw) + return lambda *args, **kw: \ + (T.Coroutine(func, name = T.funargstr(func, args, kw)) + .switch(*args, **kw)) ###-------------------------------------------------------------------------- ### Random bits of infrastructure. @@ -291,7 +293,13 @@ class Peer (MonitorObject): def update(me, hunoz = None): """Update the peer, fetching information about it from the server.""" - addr = conn.addr(me.name) + me._setaddr(me, conn.addr(me.name)) + me.ifname = conn.ifname(me.name) + me.__dict__.update(conn.peerinfo(me.name)) + me.changehook.run() + + def _setaddr(me, addr): + """Set the peer's address.""" if addr[0] == 'INET': ipaddr, port = addr[1:] try: @@ -301,8 +309,10 @@ class Peer (MonitorObject): me.addr = 'INET %s:%s' % (ipaddr, port) else: me.addr = ' '.join(addr) - me.ifname = conn.ifname(me.name) - me.__dict__.update(conn.peerinfo(me.name)) + + def setaddr(me, addr): + """Informs the object of a change to its address to ADDR.""" + me._setaddr(addr) me.changehook.run() def setifname(me, newname): @@ -474,6 +484,11 @@ class Monitor (HookClient): me.peers[rest[0]].setifname(rest[2]) except KeyError: pass + elif code == 'NEWADDR': + try: + me.peers[rest[0]].setaddr(rest[1:]) + except KeyError: + pass elif code == 'SVCCLAIM': T.aside(me.services.add, rest[0], rest[1]) if rest[0] == 'connect': @@ -1287,7 +1302,8 @@ class PeerWindow (MyWindow): def tryupdate(me): """Start the updater coroutine, if it's not going already.""" if me.cr is None: - me.cr = T.Coroutine(me._update) + me.cr = T.Coroutine(me._update, + name = 'update-peer-window %s' % me.peer.name) me.cr.switch() def stopupdate(me, *hunoz, **hukairz): @@ -1614,7 +1630,8 @@ class MonitorWindow (MyWindow): """ if me._kidding: return - T.Coroutine(me._addautopeer_hack).switch(peer) + T.Coroutine(me._addautopeer_hack, + name = '_addautopeerhack %s' % peer).switch(peer) def _addautopeer_hack(me, peer): """Make an automated connection to PEER in response to a user click."""