Completed
Push — master ( ac9c3e...191d3f )
by Jeroen
01:42
created

IrcMessageParser   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 40
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 13
dl 0
loc 40
rs 10
c 0
b 0
f 0
wmc 5

2 Methods

Rating   Name   Duplication   Size   Complexity  
A parseSingle() 0 15 2
A parse() 0 5 3
1
<?php
2
3
namespace Jerodev\PhpIrcClient;
4
5
use Jerodev\PhpIrcClient\Messages\IrcMessage;
6
use Jerodev\PhpIrcClient\Messages\NameReplyMessage;
7
8
class IrcMessageParser
9
{
10
    /**
11
     *  Parse one ore more irc messages
12
     *
13
     *  @param string $message A string received from the irc server
14
     *
15
     *  @return IrcMessage[]
16
     */
17
    public function parse(string $message)
18
    {
19
        if ($messages = preg_split('/\r?\n\r?/', $message, -1, PREG_SPLIT_NO_EMPTY)) {
20
            foreach ($messages as $msg) {
21
                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...
22
            }
23
        }
24
    }
25
26
    /**
27
     *  Parse a single message to a corresponding object
28
     *
29
     *  @param string $message
30
     *
31
     *  @return IrcMessage
32
     */
33
    private function parseSingle(string $message): IrcMessage
34
    {
35
        $command = preg_replace('/^(?::[^\s]+\s+)?([^\s]+).*?$/', '$1', $message);
36
        switch ($command)
37
        {
38
            case IrcCommand::RPL_NAMREPLY:
39
                $msg = new NameReplyMessage($message);
40
                break;
41
42
            default:
43
                $msg = new IrcMessage($message);
44
                break;
45
        }
46
47
        return $msg;
48
    }
49
}
50