一个简单的 Gateway Events 事件处理代码片段分享

论坛:laravel-workerman.iwnweb.com/d/9-g...

<?php

abstract class AbstractEvent
{
    protected $eventType;

    public function handle($connection, array $event)
    {
        if ($this->eventType !== $event['event_type']) {
            return;
        }

        $this->handleEvent($connection, $event);
    }
}

class LoginEvent extends AbstractEvent
{
    protected $eventType = 'user.login';

    public function handleEvent($connection, $event)
    {
        // handle user login event
    }
}

class JoinRoomEvent extends AbstractEvent
{
    protected $eventType = 'room.join';

    public function handleEvent($connection, $event)
    {
        // handle user join room event
    }
}

class Factory
{
    // protected static $eventType = [
    //     'login' => Login::class,
    //     'room.join' => RoomJoin::class,
    // ];

    // public static function make(array $data)
    // {
    //     $className = static::$eventTypeMap[$data['event_type']];

    //     $class = new $className();

    //     return $class;
    // }

    public static function make(array $event)
    {
        $eventTypePart = explode('.', $event['event_type']);

        $ucfirstEventTypePart = array_map('ucfirst', $eventTypePart);

        $className = implode('', $ucfirstEventTypePart);

        $class = "\\App\\Services\\{$className}";

        // validate class exists

        return new $class;
    }
}



class Events
{
    // protected $eventType = [
    //     'login' => Login::class,
    //     'room.join' => RoomJoin::class,
    // ];

    // public function onMessage($connection, string $event)
    // {
    //     $data = json_decode($event, true) ?? [];

    //     // event validate


    //     $className = $this->eventTypeMap[$data['event_type']];

    //     $class = new $className();

    //     $class->handle($connection, $data);
    // }

    // public function onMessage($connection, string $event)
    // {
    //     $data = json_decode($event, true) ?? [];

    //     // event validate

    //     foreach ($this->eventType as $eventName => $eventHandle) {
    //         $handle = new $eventHandle();

    //         $handle->handle($connection, $data);
    //     }
    // }

    public function onMessage($connection, string $event)
    {
        $data = json_decode($event, true) ?? [];

        // event validate

        $eventHandle = Factory::make($data);

        $eventHandle->handle($connection, $data);
    }
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
Study hard and make progress every day. Study hard and make progress every day.
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!