Completed
Pull Request — master (#22)
by De Cramer
02:13
created

PlayerDataProvider::onPlayerConnect()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 12
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 12
ccs 7
cts 7
cp 1
rs 9.4285
c 0
b 0
f 0
cc 2
eloc 7
nc 2
nop 2
crap 2
1
<?php
2
3
namespace eXpansion\Core\DataProviders;
4
5
use eXpansion\Core\Services\Application;
6
use eXpansion\Core\Storage\PlayerStorage;
7
use Maniaplanet\DedicatedServer\Connection;
8
use Maniaplanet\DedicatedServer\Structures\PlayerInfo;
9
10
/**
11
 * Class PlayerDataProvider provides information to plugins about what is going on with players.
12
 *
13
 * @package eXpansion\Core\DataProviders
14
 */
15
class PlayerDataProvider extends AbstractDataProvider
16
{
17
    /**
18
     * @var PlayerStorage
19
     */
20
    protected $playerStorage;
21
22
    /**
23
     * @var Connection
24
     */
25
    protected $connection;
26
27
    /** @var Application */
28
    protected $application;
29
30
    /**
31
     * PlayerDataProvider constructor.
32
     * @param $playerStorage
33
     */
34 7
    public function __construct(PlayerStorage $playerStorage, Connection $connection, Application $application)
35
    {
36 7
        $this->playerStorage = $playerStorage;
37 7
        $this->connection = $connection;
38 7
        $this->application = $application;
39 7
    }
40
41
    /**
42
     * Called when eXpansion is started.
43
     */
44 1
    public function onRun()
45
    {
46 1
        $infos = $this->connection->getPlayerList(-1, 0);
47 1
        foreach ($infos as $info) {
48 1
            $this->onPlayerConnect($info->login);
49 1
        }
50 1
    }
51
52
    /**
53
     * Called when a player connects
54
     *
55
     * @param string $login
56
     * @param bool $isSpectator
57
     */
58 3
    public function onPlayerConnect($login, $isSpectator = false)
0 ignored issues
show
Unused Code introduced by
The parameter $isSpectator is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
59
    {
60
        try {
61 3
            $playerData = $this->playerStorage->getPlayerInfo($login);
62 3
        } catch (\Exception $e) {
63
            // TODO log that player disconnected very fast.
64 1
            return;
65
        }
66
67 2
        $this->playerStorage->onPlayerConnect($playerData);
68 2
        $this->dispatch(__FUNCTION__, [$playerData]);
69 2
    }
70
71
    /**
72
     * Called when a player disconnects
73
     *
74
     * @param $login
75
     * @param $disconnectionReason
76
     */
77 1
    public function onPlayerDisconnect($login, $disconnectionReason)
78
    {
79 1
        $playerData = $this->playerStorage->getPlayerInfo($login);
80
81
        // dedicated server sends disconnect for server itself when it's closed...
82
        // so it's time to stop application gracefully.
83 1
        if ($playerData->getPlayerId() == 0) {
84
            $this->application->stopApplication();
85
            return;
86
        }
87
88 1
        $this->playerStorage->onPlayerDisconnect($playerData, $disconnectionReason);
89 1
        $this->dispatch(__FUNCTION__, [$playerData, $disconnectionReason]);
90 1
    }
91
92
    /**
93
     * When user information changes (changes from spec to player...)
94
     *
95
     * @param PlayerInfo $playerInfo
96
     */
97 1
    public function onPlayerInfoChanged($playerInfo)
98
    {
99 1
        $playerData = $this->playerStorage->getPlayerInfo($playerInfo['Login']);
100
101 1
        $newPlayerData = clone $playerData;
102 1
        $newPlayerData->merge($playerInfo);
103
104 1
        $this->playerStorage->onPlayerInfoChanged($playerData, $newPlayerData);
105 1
        $this->dispatch(__FUNCTION__, [$playerData, $newPlayerData]);
106 1
    }
107
108
    /**
109
     * When player changes allies.
110
     *
111
     */
112 1
    public function onPlayerAlliesChanged($login)
113
    {
114 1
        $newPlayerData = $this->playerStorage->getPlayerInfo($login, true);
115 1
        $playerData = $this->playerStorage->getPlayerInfo($login);
116
117 1
        $this->playerStorage->onPlayerAlliesChanged($playerData, $newPlayerData);
118 1
        $this->dispatch(__FUNCTION__, [$playerData, $newPlayerData]);
119 1
    }
120
}
121