簡體   English   中英

WAMP2上的內部客戶

[英]Internal Client on 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()];
        }
    }

作為參考,在Github上回答了這個問題。

如果您訂閱事件wamp.metaevent.session.on_joinwamp.metaevent.session.on_leave您將得到通知。 該事件返回1個與此類似的參數:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM