TestWebsocketEvent.php 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. <?php
  2. namespace App\Commands;
  3. use App\Broadcasting\Entity\WebsocketEventData;
  4. use App\Broadcasting\Events\WebsocketEvent;
  5. use Illuminate\Console\Command;
  6. final class TestWebsocketEvent extends Command
  7. {
  8. protected $signature = 'websocket:test
  9. {room}
  10. {--event=test-event}
  11. {--data=}';
  12. protected $description = 'Test websocket broadcasting by emitting an event';
  13. public function handle(): int
  14. {
  15. try {
  16. $room = $this->argument('room');
  17. $event = $this->option('event');
  18. $data = $this->option('data')
  19. ? json_decode($this->option('data'), true, 512, JSON_THROW_ON_ERROR)
  20. : ['message' => 'Test message'];
  21. $eventData = WebsocketEventData::from(
  22. room: $room,
  23. data: $data,
  24. event: $event
  25. );
  26. event(new WebsocketEvent($eventData));
  27. $this->info("Event broadcasted successfully");
  28. $this->table(
  29. ['Component', 'Value'],
  30. [
  31. ['Room', $room],
  32. ['Event', $event],
  33. ['Data', json_encode($data, JSON_PRETTY_PRINT)],
  34. ]
  35. );
  36. return self::SUCCESS;
  37. } catch (\JsonException $e) {
  38. $this->error('Invalid JSON data provided');
  39. return self::FAILURE;
  40. } catch (\Throwable $e) {
  41. $this->error("Error broadcasting event: {$e->getMessage()}");
  42. return self::FAILURE;
  43. }
  44. }
  45. }