<?php
namespace App\Subscriber\User;
use App\Event\User\LivecamOfflineEvent;
use App\Event\User\LivecamOnlineEvent;
use App\Service\ActivityFeedService;
use App\Service\MemberService;
use App\Service\User\MemberOnlineService;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
class WebcamSubscriber implements EventSubscriberInterface
{
protected MemberService $memberService;
protected ActivityFeedService $activityFeed;
protected MemberOnlineService $memberOnlineService;
public function __construct(MemberService $memberService, MemberOnlineService $memberOnlineService,
ActivityFeedService $activityFeed)
{
$this->memberService = $memberService;
$this->memberOnlineService = $memberOnlineService;
$this->activityFeed = $activityFeed;
}
public static function getSubscribedEvents(): array
{
return [
LivecamOnlineEvent::class => [
['onWebcamOnlineSetMemberFlag', 0],
['onWebcamOnlineUpdateMemberOnline', 1],
],
LivecamOfflineEvent::class => [
['onWebcamOfflineSetMemberFlag', 0],
],
];
}
/**
* @throws \Doctrine\ORM\ORMException
* @throws \Doctrine\ORM\OptimisticLockException
*/
public function onWebcamOnlineSetMemberFlag(LivecamOnlineEvent $event)
{
$member = $event->getMember();
$member->setIsWebcamActive(true);
$this->memberService->storeMember($member);
}
/**
* @return void
*
* @throws \Doctrine\ORM\ORMException
* @throws \Doctrine\ORM\OptimisticLockException
*/
public function onWebcamOnlineUpdateMemberOnline(LivecamOnlineEvent $event)
{
$member = $event->getMember();
if (!$existing = $this->memberOnlineService->getMemberOnlineByMember($member)) {
$existing = $this->memberOnlineService->createOnlineStatusForMember($member);
}
$this->memberOnlineService->refreshMemberOnlineStatus($existing);
}
/**
* @throws \Doctrine\ORM\ORMException
* @throws \Doctrine\ORM\OptimisticLockException
*/
public function onWebcamOfflineSetMemberFlag(LivecamOfflineEvent $event)
{
$member = $event->getMember();
$member->setIsWebcamActive(false);
$this->memberService->storeMember($member);
}
}