Completed
Push — master ( 7c39f2...831177 )
by Jeroen
04:12
created

IrcMessageParser::parseSingle()   B

Complexity

Conditions 7
Paths 7

Size

Total Lines 31
Code Lines 22

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 22
dl 0
loc 31
rs 8.6346
c 0
b 0
f 0
cc 7
nc 7
nop 1
1
<?php
2
3
namespace Jerodev\PhpIrcClient;
4
5
use Jerodev\PhpIrcClient\Messages\IrcMessage;
6
use Jerodev\PhpIrcClient\Messages\NameReplyMessage;
7
use Jerodev\PhpIrcClient\Messages\PingMessage;
8
use Jerodev\PhpIrcClient\Messages\PrivmsgMessage;
9
use Jerodev\PhpIrcClient\Messages\TopicChangeMessage;
10
use Jerodev\PhpIrcClient\Messages\WelcomeMessage;
11
12
class IrcMessageParser
13
{
14
    /**
15
     *  Parse one ore more irc messages.
16
     *
17
     *  @param string $message A string received from the irc server
18
     *
19
     *  @return IrcMessage[]
20
     */
21
    public function parse(string $message)
22
    {
23
        if ($messages = preg_split('/\r?\n\r?/', $message, -1, PREG_SPLIT_NO_EMPTY)) {
24
            foreach ($messages as $msg) {
25
                yield $this->parseSingle($msg);
0 ignored issues
show
Bug Best Practice introduced by
The expression yield $this->parseSingle($msg) returns the type Generator which is incompatible with the documented return type Jerodev\PhpIrcClient\Messages\IrcMessage[].
Loading history...
26
            }
27
        }
28
    }
29
30
    /**
31
     *  Parse a single message to a corresponding object.
32
     *
33
     *  @param string $message
34
     *
35
     *  @return IrcMessage
36
     */
37
    private function parseSingle(string $message): IrcMessage
38
    {
39
        $command = preg_replace('/^(?::[^\s]+\s+)?([^\s]+).*?$/', '$1', $message);
40
        switch ($command) {
41
            case 'PING':
42
                $msg = new PingMessage($message);
43
                break;
44
             
45
            case 'PRIVMSG':
46
                $msg = new PrivmsgMessage($message);
47
                break;
48
                
49
            case IrcCommand::RPL_WELCOME:
50
                $msg = new WelcomeMessage($message);
51
                break;
52
                
53
            case 'TOPIC':
54
            case IrcCommand::RPL_TOPIC:
55
                $msg = new TopicChangeMessage($message);
56
                break;
57
58
            case IrcCommand::RPL_NAMREPLY:
59
                $msg = new NameReplyMessage($message);
60
                break;
61
62
            default:
63
                $msg = new IrcMessage($message);
64
                break;
65
        }
66
67
        return $msg;
68
    }
69
}
70