Completed
Pull Request — master (#75)
by
unknown
11:25
created

PlayerDataProvider::onPlayerInfoChanged()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 10
rs 9.4285
c 0
b 0
f 0
ccs 7
cts 7
cp 1
cc 1
eloc 6
nc 1
nop 1
crap 1
1
<?php
2
3
namespace eXpansion\Framework\Core\DataProviders;
4
5
use eXpansion\Framework\Core\Services\Application;
6
use eXpansion\Framework\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\Framework\Core\DataProviders
14
 */
15
class PlayerDataProvider extends AbstractDataProvider
16
{
17
    /** @var PlayerStorage */
18
    protected $playerStorage;
19
20
    /** @var Connection */
21
    protected $connection;
22
23
    /** @var Application */
24
    protected $application;
25
26
    /**
27
     * PlayerDataProvider constructor.
28
     * @param PlayerStorage $playerStorage
29
     * @param Connection $connection
30
     * @param Application $application
31
     */
32 7
    public function __construct(PlayerStorage $playerStorage, Connection $connection, Application $application)
33
    {
34 7
        $this->playerStorage = $playerStorage;
35 7
        $this->connection = $connection;
36 7
        $this->application = $application;
37 7
    }
38
39
    /**
40
     * Called when eXpansion is started.
41
     */
42 1
    public function onRun()
43
    {
44 1
        $infos = $this->connection->getPlayerList(-1, 0);
45 1
        foreach ($infos as $info) {
46 1
            $this->onPlayerConnect($info->login);
47
        }
48 1
    }
49
50
    /**
51
     * Called when a player connects
52
     *
53
     * @param string $login
54
     * @param bool $isSpectator
55
     */
56 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...
57
    {
58
        try {
59 3
            $playerData = $this->playerStorage->getPlayerInfo($login);
60 1
        } catch (\Exception $e) {
61
            // TODO log that player disconnected very fast.
62 1
            return;
63
        }
64
65 2
        $this->playerStorage->onPlayerConnect($playerData);
66 2
        $this->dispatch(__FUNCTION__, [$playerData]);
67 2
    }
68
69
    /**
70
     * Called when a player disconnects
71
     *
72
     * @param $login
73
     * @param $disconnectionReason
74
     */
75 1
    public function onPlayerDisconnect($login, $disconnectionReason)
76
    {
77 1
        $playerData = $this->playerStorage->getPlayerInfo($login);
78
79
        // dedicated server sends disconnect for server itself when it's closed...
80
        // so it's time to stop application gracefully.
81 1
        if ($playerData->getPlayerId() == 0) {
82
            // emit event to plugins
83
            $this->application->stopApplication();
84
            return;
85
        }
86
87 1
        $this->playerStorage->onPlayerDisconnect($playerData, $disconnectionReason);
88 1
        $this->dispatch(__FUNCTION__, [$playerData, $disconnectionReason]);
89 1
    }
90
91
    /**
92
     * When user information changes (changes from spec to player...)
93
     *
94
     * @param PlayerInfo $playerInfo
95
     */
96 1
    public function onPlayerInfoChanged($playerInfo)
97
    {
98 1
        $playerData = $this->playerStorage->getPlayerInfo($playerInfo['Login']);
99
100 1
        $newPlayerData = clone $playerData;
101 1
        $newPlayerData->merge($playerInfo);
102
103 1
        $this->playerStorage->onPlayerInfoChanged($playerData, $newPlayerData);
104 1
        $this->dispatch(__FUNCTION__, [$playerData, $newPlayerData]);
105 1
    }
106
107
    /**
108
     * When player changes allies.
109
     *
110
     */
111 1
    public function onPlayerAlliesChanged($login)
112
    {
113 1
        $playerData = $this->playerStorage->getPlayerInfo($login);
114 1
        $newPlayerData = $this->playerStorage->getPlayerInfo($login, true);
115
116 1
        $this->playerStorage->onPlayerAlliesChanged($playerData, $newPlayerData);
117 1
        $this->dispatch(__FUNCTION__, [$playerData, $newPlayerData]);
118 1
    }
119
}
120