Skip to content

Commit 951169b

Browse files
committed
Enforce unsubscribe event when user disconnects -> now RemoteEvents responsibility
1 parent 57d0ea2 commit 951169b

File tree

2 files changed

+14
-11
lines changed

2 files changed

+14
-11
lines changed

src/Devristo/Phpws/RemoteEvent/RemoteEvents.php

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,20 +42,30 @@ public function listenTo(StackTransport $transport)
4242

4343
$event = $message->getEvent();
4444

45+
46+
4547
if ($message->getEvent() == 'subscribe'){
4648
$self->room($room)->subscribe($transport);
4749

48-
$transport->getWebSocketTransport()->on("close", function() use ($self, $transport){
49-
$self->emit("unsubscribe", array($transport));
50+
// If the transport is disconnected, make sure we 'fake' the unsubscribe
51+
$transport->getWebSocketTransport()->on("close", function() use ($self, $transport, $room){
52+
$self->room($room)->unsubscribe($transport);
53+
54+
// Fake unsubscribe message
55+
$message = new RemoteEventMessage();
56+
$message->setEvent("unsubscribe");
57+
$message->setRoom($room);
58+
59+
$self->emit("unsubscribe", array($transport, $message));
60+
$self->room($room)->emit("unsubscribe", array($transport, $message));
5061
});
5162

5263
} elseif ($message->getEvent() == 'unsubscribe'){
5364
$self->room($room)->unsubscribe($transport);
54-
return;
5565
}
5666

5767

58-
$self->room($room)->emit($event, array($transport, $message));
68+
$self->room($room)->emit("unsubscribe", array($transport, $message));
5969
$self->emit($event, array($transport, $message));
6070
});
6171
}

src/Devristo/Phpws/RemoteEvent/Room.php

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,6 @@ public function __construct($name, \Zend\Log\LoggerInterface $logger)
1919
public function subscribe(StackTransport $transport)
2020
{
2121
$this->members[$transport->getId()] = $transport;
22-
23-
$self = $this;
24-
25-
$transport->getWebSocketTransport()->on("close", function () use ($self, $transport) {
26-
$self->unsubscribe($transport);
27-
});
28-
2922
$this->logger->notice("[{$this->name}] User {$transport->getId()} has subscribed!");
3023
}
3124

0 commit comments

Comments
 (0)