summaryrefslogtreecommitdiff
path: root/src/Ratchet
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ratchet')
-rw-r--r--src/Ratchet/Chat.php59
1 files changed, 59 insertions, 0 deletions
diff --git a/src/Ratchet/Chat.php b/src/Ratchet/Chat.php
new file mode 100644
index 0000000..3410cf4
--- /dev/null
+++ b/src/Ratchet/Chat.php
@@ -0,0 +1,59 @@
+<?php
+
+namespace App\Ratchet;
+
+use Ratchet\MessageComponentInterface;
+use Ratchet\ConnectionInterface;
+use SplObjectStorage;
+
+class Chat implements MessageComponentInterface
+{
+ protected $clients;
+
+ public function __construct()
+ {
+ $this->clients = new SplObjectStorage;
+ }
+
+ public function onOpen(ConnectionInterface $conn)
+ {
+ // Store the new connection to send messages to later
+ $this->clients->attach($conn);
+
+ echo "New connection! ({$conn->resourceId})\n";
+ }
+
+ public function onMessage(ConnectionInterface $from, $msg)
+ {
+ $numRecv = count($this->clients) - 1;
+ echo sprintf(
+ 'Connection %d sending message "%s" to %d other connection%s' . "\n",
+ $from->resourceId,
+ $msg,
+ $numRecv,
+ $numRecv == 1 ? '' : 's'
+ );
+
+ foreach ($this->clients as $client) {
+ if ($from !== $client) {
+ // The sender is not the receiver, send to each client connected
+ $client->send($msg);
+ }
+ }
+ }
+
+ public function onClose(ConnectionInterface $conn)
+ {
+ // The connection is closed, remove it, as we can no longer send it messages
+ $this->clients->detach($conn);
+
+ echo "Connection {$conn->resourceId} has disconnected\n";
+ }
+
+ public function onError(ConnectionInterface $conn, \Exception $e)
+ {
+ echo "An error has occurred: {$e->getMessage()}\n";
+
+ $conn->close();
+ }
+}