More complete rework of packet parsing and packet generation with 29710c
This commit is contained in:
@@ -50,6 +50,20 @@ abstract class Packet extends FTNBase implements \Iterator, \Countable
|
||||
protected Collection $messages; // Messages in the Packet
|
||||
public Collection $errors; // Messages that fail validation
|
||||
protected int $index; // Our array index
|
||||
protected $pass_p = NULL; // Overwrite the packet password (when packing messages)
|
||||
|
||||
/* ABSTRACT */
|
||||
|
||||
/**
|
||||
* This function is intended to be implemented in child classes to test if the packet
|
||||
* is defined by the child object
|
||||
*
|
||||
* @see self::PACKET_TYPES
|
||||
* @param string $header
|
||||
* @return bool
|
||||
*/
|
||||
abstract public static function is_type(string $header): bool;
|
||||
abstract protected function header(): string;
|
||||
|
||||
/* STATIC */
|
||||
|
||||
@@ -63,16 +77,6 @@ abstract class Packet extends FTNBase implements \Iterator, \Countable
|
||||
return collect(static::HEADER)->sum(function($item) { return Arr::get($item,2); });
|
||||
}
|
||||
|
||||
/**
|
||||
* This function is intended to be implemented in child classes to test if the packet
|
||||
* is defined by the child object
|
||||
*
|
||||
* @see self::PACKET_TYPES
|
||||
* @param string $header
|
||||
* @return bool
|
||||
*/
|
||||
abstract public static function is_type(string $header): bool;
|
||||
|
||||
/**
|
||||
* Process a packet file
|
||||
*
|
||||
@@ -261,6 +265,9 @@ abstract class Packet extends FTNBase implements \Iterator, \Countable
|
||||
case 'name':
|
||||
return $this->{$key} ?: sprintf('%08x',timew());
|
||||
|
||||
case 'messages':
|
||||
return $this->{$key};
|
||||
|
||||
default:
|
||||
throw new \Exception('Unknown key: '.$key);
|
||||
}
|
||||
@@ -274,6 +281,12 @@ abstract class Packet extends FTNBase implements \Iterator, \Countable
|
||||
*/
|
||||
public function __toString(): string
|
||||
{
|
||||
if (empty($this->messages))
|
||||
throw new InvalidPacketException('Refusing to make an empty packet');
|
||||
|
||||
if (empty($this->tftn_p) || empty($this->fftn_p))
|
||||
throw new InvalidPacketException('Cannot generate a packet without a destination address');
|
||||
|
||||
$return = $this->header();
|
||||
|
||||
foreach ($this->messages as $o)
|
||||
@@ -379,18 +392,18 @@ abstract class Packet extends FTNBase implements \Iterator, \Countable
|
||||
/**
|
||||
* Generate a packet
|
||||
*
|
||||
* @param Collection $msgs
|
||||
* @return string
|
||||
* @throws InvalidPacketException
|
||||
*/
|
||||
public function generate(Collection $msgs): string
|
||||
public function generate(): string
|
||||
{
|
||||
return (string)$this;
|
||||
}
|
||||
|
||||
public function mail(Collection $msgs): self
|
||||
{
|
||||
$this->messages = $msgs;
|
||||
|
||||
if (empty($this->tftn_p) || empty($this->fftn_p))
|
||||
throw new InvalidPacketException('Cannot generate a packet without a destination address');
|
||||
|
||||
return (string)$this;
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -500,6 +513,20 @@ abstract class Packet extends FTNBase implements \Iterator, \Countable
|
||||
$this->messages->push($msg);
|
||||
}
|
||||
|
||||
/**
|
||||
* Overwrite the packet password
|
||||
*
|
||||
* @param string|null $password
|
||||
* @return self
|
||||
*/
|
||||
public function password(string $password=NULL): self
|
||||
{
|
||||
if ($password && (strlen($password) < 9))
|
||||
$this->pass_p = $password;
|
||||
|
||||
return $this;
|
||||
}
|
||||
|
||||
/** @deprecated Is this used? */
|
||||
public function pluck(string $key): Collection
|
||||
{
|
||||
|
Reference in New Issue
Block a user