Completed
Push — master ( 9cb483...15ad7c )
by Maik
03:24
created

ClientSocket   A

Complexity

Total Complexity 11

Size/Duplication

Total Lines 94
Duplicated Lines 10.64 %

Coupling/Cohesion

Components 1
Dependencies 3

Test Coverage

Coverage 96.67%

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 11
lcom 1
cbo 3
dl 10
loc 94
ccs 29
cts 30
cp 0.9667
rs 10
c 2
b 0
f 0

6 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 10 10 2
A connect() 0 11 3
A disconnect() 0 8 2
A isConnected() 0 4 1
A close() 0 5 1
A isWriteable() 0 8 2

How to fix   Duplicated Code   

Duplicated Code

Duplicate code is one of the most pungent code smells. A rule that is often used is to re-structure code once it is duplicated in three or more places.

Common duplication problems, and corresponding solutions are:

1
<?php
2
3
/**
4
 * This file is part of the PHP Generics package.
5
 *
6
 * @package Generics
7
 */
8
namespace Generics\Socket;
9
10
/**
11
 * This class provides a basic client socket implementation
12
 *
13
 * @author Maik Greubel <[email protected]>
14
 */
15
class ClientSocket extends Socket
16
{
17
18
    /**
19
     * Whether the socket is connected
20
     *
21
     * @var boolean
22
     */
23
    private $conntected;
24
25
    /**
26
     * Create a new client socket
27
     *
28
     * @param Endpoint $endpoint
29
     *            The endpoint to use
30
     * @param resource $clientHandle
31
     *            optional existing client handle
32
     */
33 14 View Code Duplication
    public function __construct(Endpoint $endpoint, $clientHandle = null)
34
    {
35 14
        $this->endpoint = $endpoint;
36 14
        $this->handle = $clientHandle;
37 14
        $this->conntected = false;
38
        
39 14
        if (! is_resource($clientHandle)) {
40 14
            parent::__construct($endpoint);
41
        }
42 14
    }
43
44
    /**
45
     * Connect to remote endpoint
46
     *
47
     * @throws SocketException
48
     */
49 13
    public function connect()
50
    {
51 13
        if (!is_resource($this->handle)) {
52 1
            throw new SocketException("Socket is not available");
53
        }
54 12
        if (! @socket_connect($this->handle, $this->endpoint->getAddress(), $this->endpoint->getPort())) {
55 1
            $code = socket_last_error($this->handle);
56 1
            throw new SocketException(socket_strerror($code), array(), $code);
57
        }
58 11
        $this->conntected = true;
59 11
    }
60
61
    /**
62
     * Disconnects the socket
63
     *
64
     * @throws SocketException
65
     */
66 5
    public function disconnect()
67
    {
68 5
        if (! $this->conntected) {
69
            throw new SocketException("Socket is not connected");
70
        }
71
        
72 5
        $this->close();
73 5
    }
74
75
    /**
76
     * Whether the client is connected
77
     *
78
     * @return bool
79
     */
80 12
    public function isConnected():bool
81
    {
82 12
        return $this->conntected;
83
    }
84
85
    /**
86
     *
87
     * @see \Generics\Socket\ClientSocket::disconnect()
88
     */
89 14
    public function close()
90
    {
91 14
        parent::close();
92 14
        $this->conntected = false;
93 14
    }
94
95
    /**
96
     *
97
     * {@inheritdoc}
98
     * @see \Generics\Socket\Socket::isWriteable()
99
     */
100 1
    public function isWriteable():bool
101
    {
102 1
        if (! $this->isConnected()) {
103 1
            return false;
104
        }
105
        
106 1
        return parent::isWriteable();
107
    }
108
}
109