Skip to content

Commit 7a3b0ee

Browse files
committed
Breaking changes, UriHandlers are now managed by the ClientRouter. Better PSR-2 compliance. Some changes to the examples
1 parent fc5309f commit 7a3b0ee

33 files changed

+662
-1458
lines changed

TcpStream.php

Lines changed: 0 additions & 141 deletions
This file was deleted.

composer.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
},
1616
"require": {
1717
"zendframework/zend-log": "2.*",
18-
"zendframework/zend-eventmanager": "2.2.5"
18+
"react/socket": "v0.3.2",
19+
"react/socket-client": "v0.3.2"
1920
}
2021
}
File renamed without changes.

demo.php renamed to examples/demo.php

Lines changed: 28 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
#!/php -q
22
<?php
33

4-
require_once(__DIR__."/vendor/autoload.php");
4+
require_once(__DIR__ . "/vendor/autoload.php");
55

66

77
// Run from command prompt > php demo.php
88
use Devristo\Phpws\Framing\WebSocketFrame;
99
use Devristo\Phpws\Framing\WebSocketOpcode;
1010
use Devristo\Phpws\Messaging\IWebSocketMessage;
11-
use Devristo\Phpws\Protocol\IWebSocketConnection;
11+
use Devristo\Phpws\Protocol\WebSocketConnectionInterface;
1212
use Devristo\Phpws\Server\IWebSocketServerObserver;
1313
use Devristo\Phpws\Server\UriHandler\WebSocketUriHandler;
1414
use Devristo\Phpws\Server\WebSocketServer;
@@ -22,13 +22,25 @@
2222
*/
2323
class DemoEchoHandler extends WebSocketUriHandler {
2424

25-
public function onMessage(IWebSocketConnection $user, IWebSocketMessage $msg) {
25+
public function __construct(\Zend\Log\LoggerInterface $logger, \React\EventLoop\LoopInterface $loop){
26+
parent::__construct($logger);
27+
28+
$that = $this;
29+
30+
$loop->addPeriodicTimer(1, function() use ($that){
31+
foreach($that->getConnections() as $client){
32+
$client->sendString("Hello world!");
33+
}
34+
});
35+
}
36+
37+
public function onMessage(WebSocketConnectionInterface $user, IWebSocketMessage $msg) {
2638
$this->logger->notice("[ECHO] " . strlen($msg->getData()) . " bytes");
2739
// Echo
2840
$user->sendMessage($msg);
2941
}
3042

31-
public function onAdminMessage(IWebSocketConnection $user, IWebSocketMessage $obj) {
43+
public function onAdminMessage(WebSocketConnectionInterface $user, IWebSocketMessage $obj) {
3244
$this->logger->notice("[DEMO] Admin TEST received!");
3345

3446
$frame = WebSocketFrame::create(WebSocketOpcode::PongFrame);
@@ -49,31 +61,31 @@ class DemoSocketServer implements IWebSocketServerObserver {
4961
protected $debug = true;
5062
protected $server;
5163

52-
public function __construct() {
64+
public function __construct(\React\EventLoop\LoopInterface $loop) {
5365
$logger = new \Zend\Log\Logger();
5466
$logger->addWriter(new Zend\Log\Writer\Stream("php://output"));
5567

5668
$this->logger = $logger;
5769

58-
$this->server = new WebSocketServer("tcp://0.0.0.0:12345", $logger);
70+
$this->server = new WebSocketServer("tcp://0.0.0.0:12345", $loop, $logger);
5971
$this->server->addObserver($this);
6072

61-
$this->server->addUriHandler("echo", new DemoEchoHandler($logger));
73+
$this->server->addUriHandler("echo", new DemoEchoHandler($logger, $loop));
6274
}
6375

64-
public function onConnect(IWebSocketConnection $user) {
76+
public function onConnect(WebSocketConnectionInterface $user) {
6577
$this->logger->notice("[DEMO] {$user->getId()} connected");
6678
}
6779

68-
public function onMessage(IWebSocketConnection $user, IWebSocketMessage $msg) {
80+
public function onMessage(WebSocketConnectionInterface $user, IWebSocketMessage $msg) {
6981
//$this->logger->notice("[DEMO] {$user->getId()} says '{$msg->getData()}'");
7082
}
7183

72-
public function onDisconnect(IWebSocketConnection $user) {
84+
public function onDisconnect(WebSocketConnectionInterface $user) {
7385
$this->logger->notice("[DEMO] {$user->getId()} disconnected");
7486
}
7587

76-
public function onAdminMessage(IWebSocketConnection $user, IWebSocketMessage $msg) {
88+
public function onAdminMessage(WebSocketConnectionInterface $user, IWebSocketMessage $msg) {
7789
$this->logger->notice("[DEMO] Admin Message received!");
7890

7991
$frame = WebSocketFrame::create(WebSocketOpcode::PongFrame);
@@ -86,6 +98,9 @@ public function run() {
8698

8799
}
88100

101+
$loop = \React\EventLoop\Factory::create();
102+
89103
// Start server
90-
$server = new DemoSocketServer();
91-
$server->run();
104+
$server = new DemoSocketServer($loop);
105+
$server->run();
106+
$loop->run();
File renamed without changes.

demo_ssl.php renamed to examples/demo_ssl.php

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
use Devristo\Phpws\Framing\WebSocketFrame;
99
use Devristo\Phpws\Framing\WebSocketOpcode;
1010
use Devristo\Phpws\Messaging\IWebSocketMessage;
11-
use Devristo\Phpws\Protocol\IWebSocketConnection;
11+
use Devristo\Phpws\Protocol\WebSocketConnectionInterface;
1212
use Devristo\Phpws\Server\IWebSocketServerObserver;
1313
use Devristo\Phpws\Server\UriHandler\WebSocketUriHandler;
1414
use Devristo\Phpws\Server\WebSocketServer;
@@ -22,13 +22,13 @@
2222
*/
2323
class DemoSslEchoHandler extends WebSocketUriHandler {
2424

25-
public function onMessage(IWebSocketConnection $user, IWebSocketMessage $msg) {
25+
public function onMessage(WebSocketConnectionInterface $user, IWebSocketMessage $msg) {
2626
$this->logger->notice("[ECHO] {$msg->getData()}");
2727
// Echo
2828
$user->sendMessage($msg);
2929
}
3030

31-
public function onAdminMessage(IWebSocketConnection $user, IWebSocketMessage $obj) {
31+
public function onAdminMessage(WebSocketConnectionInterface $user, IWebSocketMessage $obj) {
3232
$this->logger->notice("[DEMO] Admin TEST received!");
3333

3434
$frame = WebSocketFrame::create(WebSocketOpcode::PongFrame);
@@ -49,16 +49,16 @@ class DemoSslSocketServer implements IWebSocketServerObserver {
4949
protected $debug = true;
5050
protected $server;
5151

52-
public function __construct() {
52+
public function __construct($loop) {
5353
$logger = new \Zend\Log\Logger();
5454
$logger->addWriter(new Zend\Log\Writer\Stream("php://output"));
5555

5656
$this->logger = $logger;
5757

58-
$this->server = new WebSocketServer("ssl://0.0.0.0:12345", $logger);
58+
$this->server = new WebSocketServer("ssl://0.0.0.0:12345", $loop, $logger);
5959
$this->server->addObserver($this);
6060

61-
$this->server->addUriHandler("echo", new DemoSslEchoHandler($logger));
61+
$this->server->addUriHandler("echo", new ProxyHandler($logger));
6262

6363
$this->setupSSL();
6464
}
@@ -79,19 +79,19 @@ public function setupSSL() {
7979
$this->server->setStreamContext($context);
8080
}
8181

82-
public function onConnect(IWebSocketConnection $user) {
82+
public function onConnect(WebSocketConnectionInterface $user) {
8383
$this->logger->notice("[DEMO] {$user->getId()} connected");
8484
}
8585

86-
public function onMessage(IWebSocketConnection $user, IWebSocketMessage $msg) {
86+
public function onMessage(WebSocketConnectionInterface $user, IWebSocketMessage $msg) {
8787
$this->logger->notice("[DEMO] {$user->getId()} says '{$msg->getData()}'");
8888
}
8989

90-
public function onDisconnect(IWebSocketConnection $user) {
90+
public function onDisconnect(WebSocketConnectionInterface $user) {
9191
$this->logger->notice("[DEMO] {$user->getId()} disconnected");
9292
}
9393

94-
public function onAdminMessage(IWebSocketConnection $user, IWebSocketMessage $msg) {
94+
public function onAdminMessage(WebSocketConnectionInterface $user, IWebSocketMessage $msg) {
9595
$this->logger->notice("[DEMO] Admin Message received!");
9696

9797
$frame = WebSocketFrame::create(WebSocketOpcode::PongFrame);
@@ -104,6 +104,9 @@ public function run() {
104104

105105
}
106106

107+
$loop = \React\EventLoop\Factory::create();
108+
107109
// Start server
108-
$server = new DemoSslSocketServer();
110+
$server = new ProxyWebSocketServer($loop);
109111
$server->run();
112+
$loop->run();

examples/echo_client.php

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
<?php
2+
/**
3+
* Created by PhpStorm.
4+
* User: Chris
5+
* Date: 30-9-13
6+
* Time: 21:05
7+
*/
8+
9+
require_once(__DIR__ . "/../vendor/autoload.php");
10+
11+
$loop = \React\EventLoop\Factory::create();
12+
13+
14+
$logger = new \Zend\Log\Logger();
15+
$writer = new Zend\Log\Writer\Stream("php://output");
16+
$logger->addWriter($writer);
17+
18+
$client = new \Devristo\Phpws\Client\WebSocket("ws://echo.websocket.org/?encoding=text", $loop, $logger);
19+
$client->on("connected", function($headers) use ($logger, $client){
20+
$logger->notice("Connected!");
21+
$client->send("Hello world!");
22+
});
23+
24+
$client->on("message", function($message) use ($client, $logger){
25+
$logger->notice("Got message: ".$message->getData());
26+
$client->close();
27+
});
28+
29+
30+
$client->open();
31+
$loop->run();
File renamed without changes.

0 commit comments

Comments
 (0)