public function onRead()
{
start:
if ($this->type === 'udp') {
$this->onUdpPacket($this->read($this->getInputLength()));
return;
}
if ($this->state === self::STATE_ROOT) {
if (false === ($hdr = $this->readExact(2))) {
return;
// not enough data
}
$this->pctSize = Binary::bytes2int($hdr);
$this->setWatermark($this->pctSize);
$this->state = self::STATE_PACKET;
}
if ($this->state === self::STATE_PACKET) {
if (false === ($pct = $this->readExact($this->pctSize))) {
return;
// not enough data
}
$this->state = self::STATE_ROOT;
$this->setWatermark(2);
$this->onUdpPacket($pct);
}
goto start;
}