挂载业务控制器

在MQTT的event_mqtt消息事件中,我们通常会自定义一些与项目相关的业务逻辑,这时候就需要用到控制器转发功能,进行业务隔离。
使用$this->controller(控制器地址,方法)的方式来进行控制器挂载,

注意:参数1,控制器地址,不需要带/app/mqtt/前置命名空间名称。
注意:参数2,当为空时,默认加载index方法。

下面以为Publish消息事件中的Demo代码为例:

namespace app\event_mqtt\v3;

use x\mqtt\base\Event;
use x\mqtt\common\Types;
use x\mqtt\v3\Dc;

class Publish extends Event {
    /**
     * 说明:
     * $this->getServer() : 获取Swoole实例
     * $this->getFd() : 获取当前请求标示符
     * $this->getData() : 获取已解码后的数据包
     * $this->getReactorId : 获取当前请求所处的线程ID
    */
    
    /**
     * 事件处理入口
     * @todo 无
     * @author 小黄牛
     * @version v2.0.11 + 2021.07.02
     * @deprecated 暂不启用
     * @global 无
     * @return void
    */ 
    public function run() {
        // 这里可以使用controller,挂载控制器
        // 控制器,方法[默认index]
        // $this->controller('system/index');

        // 默认的广播示例控制器
        $this->controller('system/index', 'run');

        // // 处理完成后需要回复以下内容
        $data = $this->getData();
        if ($data['qos'] === 1) {
            $this->getServer()->send(
                $fd,
                Dc::pack([
                    'type' => Types::PUBACK,
                    'message_id' => $data['message_id'] ?? '',
                ])
            );
        }
    }
}