Completed
Pull Request — master (#25)
by Joel
08:51
created

RoundRobinClientPool   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 29
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 2

Importance

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

1 Method

Rating   Name   Duplication   Size   Complexity  
B chooseHttpClient() 0 23 6
1
<?php
2
3
namespace Http\Client\Common\HttpClientPool;
4
5
use Http\Client\Common\Exception\HttpClientNotFoundException;
6
use Http\Client\Common\HttpClientPool;
7
8
/**
9
 * RoundRobinClientPool will choose the next client in the pool.
10
 *
11
 * @author Joel Wurtz <[email protected]>
12
 */
13
final class RoundRobinClientPool extends HttpClientPool
14
{
15
    /**
16
     * {@inheritdoc}
17
     */
18
    public function chooseHttpClient()
19
    {
20
        $last = current($this->clientPool);
21
22
        do {
23
            $client = next($this->clientPool);
24
25
            if (false === $client) {
26
                $client = reset($this->clientPool);
27
28
                if (false === $client) {
29
                    throw new HttpClientNotFoundException('Cannot choose a http client as there is no one present in the pool');
30
                }
31
            }
32
33
            // Case when there is only one and the last one has been disabled
34
            if ($last === $client && $client->isDisabled()) {
35
                throw new HttpClientNotFoundException('Cannot choose a http client as there is no one enabled in the pool');
36
            }
37
        } while ($client->isDisabled());
38
39
        return $client;
40
    }
41
}
42