Skip to content

Commit d377e16

Browse files
committed
Implemented socket endpoint and siblings server and client classes
1 parent 51b3a35 commit d377e16

15 files changed

+212
-6
lines changed

.gitignore

100644100755
File mode changed.

README.md

100644100755
File mode changed.

composer.json

100644100755
File mode changed.

phpunit.xml

100644100755
File mode changed.

src/Client.php

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<?php
2+
3+
namespace WebSocket;
4+
5+
class Client extends SocketEndpoint implements ISocketImplementer
6+
{
7+
/**
8+
* Create socket using connectToSocket
9+
* method
10+
* @var resource
11+
*/
12+
private $createdSocket;
13+
14+
/**
15+
* Create connection for server socket
16+
* @return resource|\WebSocket\SocketError
17+
*/
18+
public function create()
19+
{
20+
$this->createdSocket = $this->connectToSocket();
21+
22+
if (!$this->createdSocket) {
23+
return new SocketError('Can\'t create and connect to socket');
24+
}
25+
26+
return $this->createdSocket;
27+
}
28+
29+
/**
30+
* Read message from created server socket
31+
* @return \WebSocket\SocketError|WebSocket\SocketMessage
32+
*/
33+
public function read()
34+
{
35+
$responseFromSocket = new SocketMessage(
36+
$this->readFromSocket($this->createdSocket)
37+
);
38+
39+
if (!$responseFromSocket->getSocketResponse()) {
40+
return new SocketError('Can\'t read from server socket');
41+
}
42+
43+
return $responseFromSocket;
44+
}
45+
46+
/**
47+
* Write message to created server socket
48+
* @param string $message
49+
* @return int|\WebSocket\SocketError
50+
*/
51+
public function write(string $message)
52+
{
53+
$writtenSocket = $this->write($message);
54+
55+
if (!$writtenSocket) {
56+
return new SocketError('Can\'t write to server socket');
57+
}
58+
59+
return $writtenSocket;
60+
}
61+
}

src/ISocketImplementer.php

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<?php
2+
3+
namespace WebSocket;
4+
5+
interface ISocketImplementer
6+
{
7+
/**
8+
* Initiate socket connection
9+
*/
10+
public function create();
11+
12+
/**
13+
* Read message from initiated socket
14+
*/
15+
public function read();
16+
17+
/**
18+
* Write message to initiated socket
19+
* @param string $message
20+
*/
21+
public function write(string $message);
22+
}

src/Server.php

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<?php
2+
3+
namespace WebSocket;
4+
5+
class Server extends SocketEndpoint implements ISocketImplementer
6+
{
7+
/**
8+
* Socket resource created using
9+
* acceptSocketConnection method
10+
* @var resource
11+
*/
12+
protected $createdSocket;
13+
14+
/**
15+
* Accept client socket connection
16+
* @return resource|\WebSocket\SocketError
17+
*/
18+
public function create()
19+
{
20+
$this->createdSocket = $this->acceptConnectionOnSocket();
21+
22+
if (!$this->createdSocket) {
23+
return new SocketError('Can\'t accepted connected socket');
24+
}
25+
26+
return $this->createdSocket;
27+
}
28+
29+
/**
30+
* Read message from accepted client socket
31+
* @return \WebSocket\SocketError|\WebSocket\SocketMessage
32+
*/
33+
public function read()
34+
{
35+
$socketResponse = new SocketMessage(
36+
$this->readFromSocket($this->createdSocket)
37+
);
38+
39+
if (!$socketResponse->getSocketResponse()) {
40+
return new SocketError('Can\'t read message from client socket');
41+
}
42+
43+
return $socketResponse;
44+
}
45+
46+
/**
47+
* Write message to client accepted socket
48+
* @param string $message
49+
* @return int|\WebSocket\SocketError
50+
*/
51+
public function write(string $message)
52+
{
53+
$writtenMessage = $this->writeToSocket($this->createdSocket, $message);
54+
55+
if (!$writtenMessage) {
56+
return new SocketError('Can\'t write to accepted client socket');
57+
}
58+
59+
return $writtenMessage;
60+
}
61+
}

src/Socket.php

100644100755
Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,15 +100,28 @@ public function acceptSocketConnection()
100100
return $acceptedSocket;
101101
}
102102

103+
/**
104+
* Return resource of type Socket
105+
* which was created right now. Can get
106+
* access by connect method
107+
* @return resource
108+
*/
109+
public function getConnectedSocket()
110+
{
111+
return $this->socket;
112+
}
113+
103114
/**
104115
* Initiates a connection on a socket
105-
* @return bool
116+
* @return \WebSocket\Socket
106117
*/
107118
public function connect()
108119
{
109-
return socket_connect(
120+
socket_connect(
110121
$this->socket, $this->host, $this->port
111122
);
123+
124+
return $this;
112125
}
113126

114127
/**

src/SocketEndpoint.php

100644100755
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public function getCredentials()
3333
* PHP socket API
3434
* @return \WebSocket\Socket
3535
*/
36-
public function getSocket()
36+
protected function getSocket()
3737
{
3838
return new Socket(
3939
$this->getCredentials()->getCredential('host'),
@@ -46,7 +46,7 @@ public function getSocket()
4646
* Usually use when wanted to create server socket
4747
* @return resource|bool
4848
*/
49-
public function acceptConnectionOnSocket()
49+
protected function acceptConnectionOnSocket()
5050
{
5151
return $this->getSocket()->acceptSocketConnection();
5252
}
@@ -56,9 +56,9 @@ public function acceptConnectionOnSocket()
5656
* when wanted to create client socket
5757
* @return resource|bool
5858
*/
59-
public function connectToSocket()
59+
protected function connectToSocket()
6060
{
61-
return $this->getSocket()->connect();
61+
return $this->getSocket()->connect()->getConnectedSocket();
6262
}
6363

6464
/**

src/SocketError.php

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
3+
namespace WebSocket;
4+
5+
class SocketError
6+
{
7+
/**
8+
* Socket error message
9+
* @var string
10+
*/
11+
private string $errorMessage;
12+
13+
/**
14+
* Initiate constructor method of SocketError
15+
* @var string $error
16+
* @return void
17+
*/
18+
public function __construct(string $error)
19+
{
20+
$this->errorMessage = $error;
21+
}
22+
23+
/**
24+
* Return setted socket error
25+
* @return string
26+
*/
27+
public function getSocketError()
28+
{
29+
return $this->errorMessage;
30+
}
31+
}

0 commit comments

Comments
 (0)