首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Thruway WAMP2上的内部客户端

Thruway WAMP2上的内部客户端
EN

Stack Overflow用户
提问于 2014-10-02 11:40:50
回答 1查看 1.1K关注 0票数 0

我正在开发一个内部客户端+身份验证模型的示例,如下所示。现在,我需要检索已连接会话的列表,并拦截来自内部客户端的会话的关闭事件。我想问一下,有没有什么方法可以把这个任务归档?我在考虑将这个列表保存到redis中,但这意味着我必须重写Thruway\Peer\Router类,因为所需的变量现在是私有的,我们无法访问它们来扩展。

文件server.php

代码语言:javascript
复制
    <?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

代码语言:javascript
复制
    <?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

代码语言:javascript
复制
    <?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()];
        }
    }
EN

回答 1

Stack Overflow用户

发布于 2014-10-07 22:18:00

为了便于参考,我们在Github上回答了这个问题。

如果您订阅了活动wamp.metaevent.session.on_joinwamp.metaevent.session.on_leave,您将收到通知。该事件返回1个参数,如下所示:

代码语言:javascript
复制
 `{       "realm":"realm1",       "authprovider":null,       "authid":"username",       "authrole":"none",       "authmethod":"simplysimple",       "session":6016528494456948     }`
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26154177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档