Внутренний клиент на Thruway WAMP2

Я работаю над примером для модели «Внутренний клиент + аутентификация», как показано ниже.
Теперь мне нужно получить список подключенных сеансов и перехватить событие закрытия сеанса из внутреннего клиента.
Я хочу спросить, есть ли способ архивировать эту задачу? Я думал о сохранении этого списка в Redis, но это означает, что мне придется переписать Thruway\Peer\Router классы, потому что необходимые переменные теперь закрытые, у нас нет доступа к ним для расширений.

Файл server.php

    <?php
/**
* server.php
*/

require "../bootstrap.php";
require 'InternalClient.php';
require 'SimpleAuthProviderClient.php';

use Thruway\Peer\Router;
use Thruway\Transport\RatchetTransportProvider;
use React\EventLoop\Factory;
use Thruway\Manager\ManagerClient;
use Thruway\Transport\InternalClientTransportProvider;

$manager = new ManagerClient();
$loop = Factory::create();

$router = new Router($loop, $manager);
$router->addTransportProvider(new InternalClientTransportProvider($manager));

$internalTransportProvider = new InternalClientTransportProvider(new \InternalClient());
$router->addTransportProvider($internalTransportProvider);

$authMgr = new \Thruway\Authentication\AuthenticationManager();

$router->setAuthenticationManager($authMgr);
$router->addTransportProvider(new InternalClientTransportProvider($authMgr));

//Provide authentication for the realm: 'somerealm'
$authProvClient = new SimpleAuthProviderClient(["somerealm"]);
$router->addTransportProvider(new InternalClientTransportProvider($authProvClient));

$transportProvider = new RatchetTransportProvider("127.0.0.1", 9090);
$router->addTransportProvider($transportProvider);

$router->start();

Файл SimpleAuthProviderClient.php

    <?php
/**
* SimpleAuthProviderClient.php
*/
require "../bootstrap.php";

/**
* Class SimpleAuthProviderClient
*/
class SimpleAuthProviderClient extends \Thruway\Authentication\AbstractAuthProviderClient
{

/**
* @return string
*/
public function getMethodName()
{
return 'simplysimple';
}

/**
* @param mixed $signature
* @param null $extra
* @return array
*/
public function processAuthenticate($signature, $extra = null)
{
if ($signature == "letMeIn") {
return ["SUCCESS"];
} else {
return ["FAILURE"];
}

}

}

Файл InternalClient.php

    <?php
/**
* InternalClient.php
*/
require "../bootstrap.php";

/**
* Class InternalClient
*/
class InternalClient extends Thruway\Peer\Client
{

function __construct()
{
parent::__construct("realm1");
}

/**
* @param \Thruway\AbstractSession $session
* @param \Thruway\Transport\TransportInterface $transport
*/
public function onSessionStart($session, $transport)
{
echo "--------------- Hello from InternalClient ------------";
$this->getCallee()->register($this->session, 'com.example.getphpversion', [$this, 'getPhpVersion']);
}function start()
{
}

/**
* @return array
*/
function getPhpVersion()
{
return [phpversion()];
}
}

0

Решение

В справочных целях на этот вопрос был дан ответ Github.

Если вы подписались на события wamp.metaevent.session.on_join а также wamp.metaevent.session.on_leave вы получите уведомление. Событие возвращает 1 аргумент, похожий на этот:


{
"realm":"realm1",
"authprovider":null,
"authid":"username",
"authrole":"none",
"authmethod":"simplysimple",
"session":6016528494456948
}

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]