feat: Implement real-time chat with Reverb
This commit is contained in:
@@ -0,0 +1,44 @@
|
||||
<?php
|
||||
|
||||
namespace App\Events;
|
||||
|
||||
use App\Models\Message;
|
||||
use Illuminate\Broadcasting\Channel;
|
||||
use Illuminate\Broadcasting\InteractsWithSockets;
|
||||
use Illuminate\Broadcasting\PresenceChannel;
|
||||
use Illuminate\Broadcasting\PrivateChannel;
|
||||
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
|
||||
use Illuminate\Foundation\Events\Dispatchable;
|
||||
use Illuminate\Queue\SerializesModels;
|
||||
|
||||
class MessageSent implements ShouldBroadcast
|
||||
{
|
||||
use Dispatchable, InteractsWithSockets, SerializesModels;
|
||||
|
||||
/**
|
||||
* Create a new event instance.
|
||||
*/
|
||||
public function __construct(public Message $message)
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the channels the event should broadcast on.
|
||||
*
|
||||
* @return array<int, Channel>
|
||||
*/
|
||||
public function broadcastOn(): array
|
||||
{
|
||||
return [
|
||||
new PrivateChannel('chats.'.$this->message->chat_id),
|
||||
];
|
||||
}
|
||||
|
||||
public function broadcastWith(): array
|
||||
{
|
||||
return [
|
||||
'message' => $this->message->load('user'),
|
||||
];
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@
|
||||
|
||||
namespace App\Http\Controllers;
|
||||
|
||||
use App\Events\MessageSent;
|
||||
use App\Http\Requests\StoreMessageRequest;
|
||||
use App\Models\Chat;
|
||||
use App\Models\Message;
|
||||
@@ -30,11 +31,13 @@ class MessageController extends Controller
|
||||
*/
|
||||
public function store(StoreMessageRequest $request, Chat $chat)
|
||||
{
|
||||
$chat->messages()->create([
|
||||
$message = $chat->messages()->create([
|
||||
...$request->validated(),
|
||||
'user_id' => $request->user()->id,
|
||||
]);
|
||||
|
||||
broadcast(new MessageSent($message));
|
||||
|
||||
return redirect()->back();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user