/** * @param Peer $peer * @param NetworkMessage $msg */ public function onPacket(Peer $peer, NetworkMessage $msg) { $payload = $msg->getPayload(); if ($msg->getCommand() == 'inv') { /** @var Inv $payload */ $items = $payload->getItems(); foreach ($items as $invItem) { if ($invItem->isBlock()) { $this->emit('inv.block', [$peer, $invItem]); } else { if ($invItem->isTx()) { $this->emit('inv.tx', [$peer, $invItem]); } else { if ($invItem->isFilteredBlock()) { $this->emit('inv.filtered', [$peer, $invItem]); } } } } } $this->emit($msg->getCommand(), [$peer, $payload]); }
/** * @param NetworkMessage $object * @return Buffer */ public function serialize(NetworkMessage $object) { $payload = $object->getPayload()->getBuffer(); $command = str_pad(unpack("H*", $object->getCommand())[1], 24, '0', STR_PAD_RIGHT); $header = $this->getHeaderTemplate()->write([Buffer::hex($this->network->getNetMagicBytes()), Buffer::hex($command), $payload->getSize(), $object->getChecksum()]); return Buffertools::concat($header, $payload); }