FetchChannel::__invoke()   A
last analyzed

Complexity

Conditions 3
Paths 2

Size

Total Lines 32
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 3
eloc 18
c 1
b 0
f 0
nc 2
nop 1
dl 0
loc 32
rs 9.6666
1
<?php
2
3
namespace BeyondCode\LaravelWebSockets\API;
4
5
use Illuminate\Http\Request;
6
use Illuminate\Support\Str;
7
use Symfony\Component\HttpKernel\Exception\HttpException;
8
9
class FetchChannel extends Controller
10
{
11
    /**
12
     * Handle the incoming request.
13
     *
14
     * @param  \Illuminate\Http\Request  $request
15
     * @return \Illuminate\Http\Response
16
     */
17
    public function __invoke(Request $request)
18
    {
19
        $channel = $this->channelManager->find(
20
            $request->appId, $request->channelName
21
        );
22
23
        if (is_null($channel)) {
24
            return new HttpException(404, "Unknown channel `{$request->channelName}`.");
25
        }
26
27
        return $this->channelManager
28
            ->getGlobalConnectionsCount($request->appId, $request->channelName)
29
            ->then(function ($connectionsCount) use ($request) {
30
                // For the presence channels, we need a slightly different response
31
                // that need an additional call.
32
                if (Str::startsWith($request->channelName, 'presence-')) {
33
                    return $this->channelManager
34
                        ->getChannelsMembersCount($request->appId, [$request->channelName])
35
                        ->then(function ($channelMembers) use ($connectionsCount, $request) {
36
                            return [
37
                                'occupied' => $connectionsCount > 0,
38
                                'subscription_count' => $connectionsCount,
39
                                'user_count' => $channelMembers[$request->channelName] ?? 0,
40
                            ];
41
                        });
42
                }
43
44
                // For the rest of the channels, we might as well
45
                // send the basic response with the subscriptions count.
46
                return [
47
                    'occupied' => $connectionsCount > 0,
48
                    'subscription_count' => $connectionsCount,
49
                ];
50
            });
51
    }
52
}
53