public function pipe($dest)
{
$source = $this;
$this->onMessage = function ($source, $data) use($dest) {
$dest->send($data);
};
$this->onClose = function ($source) use($dest) {
$dest->destroy();
};
$dest->onBufferFull = function ($dest) use($source) {
$source->pauseRecv();
};
$dest->onBufferDrain = function ($dest) use($source) {
$source->resumeRecv();
};
}