Passed
Push — master ( d054cb...2fe6d1 )
by Nikita
03:16
created

GdaemonStatus::version()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 7
Code Lines 4

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 1

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 4
c 1
b 0
f 0
nc 1
nop 0
dl 0
loc 7
ccs 4
cts 4
cp 1
crap 1
rs 10
1
<?php
2
namespace Knik\Gameap;
3
4
use Knik\Binn\BinnList;
5
use RuntimeException;
6
use InvalidArgumentException;
7
8
class GdaemonStatus extends Gdaemon
9
{
10
    const COMMAND_VERSION = 1;
11
    const COMMAND_STATUS_BASE = 2;
12
    const COMMAND_STATUS_DETAILS = 3;
13
    
14
    /**
15
     * @var int
16
     */
17
    protected $mode = self::DAEMON_SERVER_MODE_STATUS;
18
19
    /**
20
     * @return array
21
     */
22 6
    public function version()
23
    {
24 6
        $results = $this->request(self::COMMAND_VERSION);
25
        
26
        return [
27 3
            'version' => $results[0],
28 3
            'compile_date' => $results[1],
29 1
        ];
30
    }
31
32
    /**
33
     * @return array
34
     */
35 3
    public function infoBase()
36
    {
37 3
        $results = $this->request(self::COMMAND_STATUS_BASE);
38
39
        return [
40 3
            'uptime' => $results[0],
41 3
            'working_tasks_count' => $results[1],
42 3
            'waiting_tasks_count' => $results[2],
43 3
            'online_servers_count' => $results[3],
44 1
        ];
45
    }
46
47
    /**
48
     * @return array
49
     */
50 3
    public function infoDetails()
51
    {
52 3
        $results = $this->request(self::COMMAND_STATUS_DETAILS);
53
54
        return [
55 3
            'uptime' => $results[0],
56 3
            'working_tasks_list' => $results[1],
57 3
            'waiting_tasks_list' => $results[2],
58 3
            'online_servers_list' => $results[3],
59 1
        ];
60
    }
61
62
    /**
63
     * @param $command
64
     *
65
     * @return array
66
     */
67 12
    private function request($command)
68
    {
69 12
        $writeBinn = new BinnList;
70 12
        $writeBinn->addUint8($command);
71
72 12
        $read = $this->writeAndReadSocket($writeBinn->serialize());
73
74 12
        $readBinn = new BinnList($read);
75 12
        $results = $readBinn->unserialize();
76
77 12
        if ($results[0] != self::STATUS_OK) {
78 3
            throw new RuntimeException('Error: ' . isset($results[1]) ? $results[1] : 'Unknown');
79
        }
80
        
81 9
        return array_slice($results, 2);
82
    }
83
}