*/ private array $groups = []; public function getConnectionGroup(string $name): ConnectionGroup { if (!array_key_exists($name, $this->groups)) { $group = new ConnectionGroup($name); $this->groups[$name] = $group; // Clean up group when the last member leaves $group->on(ConnectionGroup::EVENT_LEAVE, function () use ($group) { Loop::futureTick(function () use ($group) { if (count($group) === 0) { $this->emit(self::EVENT_DESTROY, [ $group ]); $group->removeAllListeners(); unset($this->groups[$group->getName()]); } }); }); $this->emit(self::EVENT_CREATE, [ $group ]); } else { $group = $this->groups[$name]; } return $group; } public function closeAll(string $reason, int $code=1001) { foreach ($this->groups as $group) { $group->closeAll($reason, $code); } } }