SendMessage::__invoke()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 34
Code Lines 23

Duplication

Lines 0
Ratio 0 %

Importance

Changes 3
Bugs 0 Features 0
Metric Value
cc 3
eloc 23
c 3
b 0
f 0
nc 3
nop 1
dl 0
loc 34
rs 9.552
1
<?php
2
3
namespace BeyondCode\LaravelWebSockets\Dashboard\Http\Controllers;
4
5
use BeyondCode\LaravelWebSockets\Concerns\PushesToPusher;
6
use BeyondCode\LaravelWebSockets\Rules\AppId;
7
use Illuminate\Http\Request;
8
use Throwable;
9
10
class SendMessage
11
{
12
    use PushesToPusher;
13
14
    /**
15
     * Send the message to the requested channel.
16
     *
17
     * @param  \Illuminate\Http\Request  $request
18
     * @return \Illuminate\Http\Response
19
     */
20
    public function __invoke(Request $request)
21
    {
22
        $request->validate([
23
            'appId' => ['required', new AppId],
24
            'key' => 'required|string',
25
            'secret' => 'required|string',
26
            'event' => 'required|string',
27
            'channel' => 'required|string',
28
            'data' => 'required|json',
29
        ]);
30
31
        $broadcaster = $this->getPusherBroadcaster([
32
            'key' => $request->key,
33
            'secret' => $request->secret,
34
            'id' => $request->appId,
35
        ]);
36
37
        try {
38
            $decodedData = json_decode($request->data, true);
39
40
            $broadcaster->broadcast(
41
                [$request->channel],
42
                $request->event,
43
                $decodedData ?: []
44
            );
45
        } catch (Throwable $e) {
46
            return response()->json([
47
                'ok' => false,
48
                'exception' => $e->getMessage(),
49
            ]);
50
        }
51
52
        return response()->json([
53
            'ok' => true,
54
        ]);
55
    }
56
}
57