StartGitterBot   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 78
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

Changes 6
Bugs 0 Features 2
Metric Value
c 6
b 0
f 2
dl 0
loc 78
rs 10
wmc 5
lcom 1
cbo 2

3 Methods

Rating   Name   Duplication   Size   Complexity  
A handle() 0 21 2
A makePidFile() 0 5 1
A removePidFile() 0 6 2
1
<?php
2
/**
3
 * This file is part of GitterBot package.
4
 *
5
 * @author Serafim <[email protected]>
6
 * @author butschster <[email protected]>
7
 *
8
 * @date 24.09.2015 15:27
9
 *
10
 * For the full copyright and license information, please view the LICENSE
11
 * file that was distributed with this source code.
12
 */
13
namespace Interfaces\Console\Commands;
14
15
16
use Carbon\Carbon;
17
use Illuminate\Console\Command;
18
use Illuminate\Contracts\Container\Container;
19
use Domains\Room\RoomInterface;
20
21
/**
22
 * Class StartGitterBot
23
 */
24
class StartGitterBot extends Command
25
{
26
    /**
27
     * The name and signature of the console command.
28
     *
29
     * @var string
30
     */
31
    protected $signature = 'gitter:listen {room}';
32
33
    /**
34
     * The console command description.
35
     *
36
     * @var string
37
     */
38
    protected $description = 'Start gitter bot thread for target room.';
39
40
    /**
41
     * @var Container
42
     */
43
    protected $container;
44
45
    /**
46
     * @var string
47
     */
48
    protected $pid;
49
50
    /**
51
     * Execute the console command.
52
     *
53
     * @param Container $app
54
     *
55
     * @return mixed
56
     * @throws \InvalidArgumentException
57
     * @throws \RuntimeException
58
     * @throws \LogicException
59
     * @throws \Exception
60
     */
61
    public function handle(Container $app)
62
    {
63
        $roomId = $this->argument('room');
64
65
        /** @var RoomInterface $room */
66
        if (is_null($room = $app['room.manager']->get($roomId))) {
67
            $this->warn("Room [$roomId] not found");
68
            return;
69
        }
70
71
        $client = $room->client();
72
        $room->listen();
73
74
        $this->info(sprintf('%s started at %s', $client->version(), Carbon::now()));
75
76
        $this->makePidFile();
77
78
        $client->run();
79
80
        $this->removePidFile();
81
    }
82
83
    /**
84
     * Create pid file
85
     */
86
    protected function makePidFile()
87
    {
88
        $this->pid = storage_path('pids/' . date('Y_m_d_tis_') . microtime(1) . '.pid');
89
        file_put_contents($this->pid, getmypid());
90
    }
91
92
    /**
93
     * Delete pid file
94
     */
95
    protected function removePidFile()
96
    {
97
        if (is_file($this->pid)) {
98
            unlink($this->pid);
99
        }
100
    }
101
}
102