Файл: gapps/vendor/laravel/framework/src/Illuminate/Broadcasting/BroadcastEvent.php
Строк: 73
<?php
namespace IlluminateBroadcasting;
use ReflectionClass;
use ReflectionProperty;
use IlluminateContractsQueueJob;
use IlluminateContractsSupportArrayable;
use IlluminateContractsBroadcastingBroadcaster;
class BroadcastEvent
{
/**
* The broadcaster implementation.
*
* @var IlluminateContractsBroadcastingBroadcaster
*/
protected $broadcaster;
/**
* Create a new job handler instance.
*
* @param IlluminateContractsBroadcastingBroadcaster $broadcaster
* @return void
*/
public function __construct(Broadcaster $broadcaster)
{
$this->broadcaster = $broadcaster;
}
/**
* Handle the queued job.
*
* @param IlluminateContractsQueueJob $job
* @param array $data
* @return void
*/
public function fire(Job $job, array $data)
{
$event = unserialize($data['event']);
$name = method_exists($event, 'broadcastAs')
? $event->broadcastAs() : get_class($event);
$this->broadcaster->broadcast(
$event->broadcastOn(), $name, $this->getPayloadFromEvent($event)
);
$job->delete();
}
/**
* Get the payload for the given event.
*
* @param mixed $event
* @return array
*/
protected function getPayloadFromEvent($event)
{
if (method_exists($event, 'broadcastWith')) {
return $event->broadcastWith();
}
$payload = [];
foreach ((new ReflectionClass($event))->getProperties(ReflectionProperty::IS_PUBLIC) as $property) {
$payload[$property->getName()] = $this->formatProperty($property->getValue($event));
}
return $payload;
}
/**
* Format the given value for a property.
*
* @param mixed $value
* @return mixed
*/
protected function formatProperty($value)
{
if ($value instanceof Arrayable) {
return $value->toArray();
}
return $value;
}
}