1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72:
<?php
namespace SAREhub\Commons\Zmq\PublishSubscribe;
class SubscriptionTopic
{
const PART_SEPARATOR = '.';
const STAR_PART = '*';
const HASH_PART = '#';
private $topic;
private $topicParts;
public function __construct(string $topic)
{
$this->topic = $topic;
$this->topicParts = self::explodeTopicParts($this->topic);
}
public function match(string $other)
{
if ($this->topic === $other) {
return true;
}
$otherParts = self::explodeTopicParts($other);
if (count($this->topicParts) !== count($otherParts)) {
return false;
}
foreach ($this->topicParts as $i => $part) {
if (!self::matchPart($part, $otherParts[$i])) {
return false;
}
}
return true;
}
public static function matchPart(string $part, string $other)
{
return self::isWildcardPart($part) || $part === $other;
}
public static function isStarPart(string $part)
{
}
public static function isHashPart(string $part)
{
}
public static function isWildcardPart(string $part)
{
return $part == self::STAR_PART;
}
public static function explodeTopicParts(string $topic)
{
return explode(self::PART_SEPARATOR, $topic);
}
public function __toString()
{
return $this->topic;
}
}