При подключении я не знаю, какой объект добавить в $this->clientList
(который является SplObjectStorage
объект), и только теперь будет после регистрации. Я мог бы включить заполнитель StdClass и просто добавить к нему, однако, мне не нужен этот заполнитель. Я полагаю, я мог бы подождать, чтобы добавить контроллер после регистрации, но я всегда вижу, как они добавляются при подключении, и я обеспокоен, что для этого есть веская причина.
Как я могу заменить этот объект-заполнитель StdClass в SplObjectStorage, который связан с соединением, вместо простого добавления к нему нового объекта?
$server->on('connection', function ($conn) {
$this->clientController->addClient($conn);
$conn->on('data', function($data) use ($conn){
$this->clientController->processData($conn,$data);
});
});
class ClientCollections
{
public function __construct() {
$this->clientList = new \SplObjectStorage();
}
public function addClient($connStream) {
$this->clientList->attach($connStream, new \StdClass);
}
public function processData($connStream, $data) {
if(isset($this->clientList[$this->connStream]->Client)) $this->clientList[$this->connStream]->Client->execute($data);
elseif($controller=authenticateLogon($data)) $this->clientList[$this->connStream]->Client=$controller; //Controller type based on username/password
}
}
Задача ещё не решена.
Других решений пока нет …