master

laravel/framework

Last updated at: 29/12/2023 09:20

PendingBroadcast.php

TLDR

This file contains the PendingBroadcast class, which is responsible for broadcasting events. It allows you to specify a specific broadcaster and the targets for the broadcast.

Methods

via($connection = null)

This method specifies the broadcaster to use for the broadcast. It allows you to specify a connection that will be used for the broadcast. The default value is null, which means the default connection will be used. The method checks if the event being broadcast has a broadcastVia method, and if so, it calls that method.

toOthers()

This method specifies that the event should be broadcasted to everyone except the current user. It checks if the event being broadcast has a dontBroadcastToCurrentUser method, and if so, it calls that method.

__destruct()

This method is a destructor that is automatically called when the object is destroyed. It dispatches the event using the event dispatcher.

<?php

namespace Illuminate\Broadcasting;

use Illuminate\Contracts\Events\Dispatcher;

class PendingBroadcast
{
    /**
     * The event dispatcher implementation.
     *
     * @var \Illuminate\Contracts\Events\Dispatcher
     */
    protected $events;

    /**
     * The event instance.
     *
     * @var mixed
     */
    protected $event;

    /**
     * Create a new pending broadcast instance.
     *
     * @param  \Illuminate\Contracts\Events\Dispatcher  $events
     * @param  mixed  $event
     * @return void
     */
    public function __construct(Dispatcher $events, $event)
    {
        $this->event = $event;
        $this->events = $events;
    }

    /**
     * Broadcast the event using a specific broadcaster.
     *
     * @param  string|null  $connection
     * @return $this
     */
    public function via($connection = null)
    {
        if (method_exists($this->event, 'broadcastVia')) {
            $this->event->broadcastVia($connection);
        }

        return $this;
    }

    /**
     * Broadcast the event to everyone except the current user.
     *
     * @return $this
     */
    public function toOthers()
    {
        if (method_exists($this->event, 'dontBroadcastToCurrentUser')) {
            $this->event->dontBroadcastToCurrentUser();
        }

        return $this;
    }

    /**
     * Handle the object's destruction.
     *
     * @return void
     */
    public function __destruct()
    {
        $this->events->dispatch($this->event);
    }
}