gcnhub: rewrite to use Twisted