use Devel::GlobalDestruction to protect Channel
use Devel::GlobalDestruction to protect connection
implement full state machine around connection closing