@@ -42,20 +42,30 @@ public function listenTo(StackTransport $transport)
42
42
43
43
$ event = $ message ->getEvent ();
44
44
45
+
46
+
45
47
if ($ message ->getEvent () == 'subscribe ' ){
46
48
$ self ->room ($ room )->subscribe ($ transport );
47
49
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 ));
50
61
});
51
62
52
63
} elseif ($ message ->getEvent () == 'unsubscribe ' ){
53
64
$ self ->room ($ room )->unsubscribe ($ transport );
54
- return ;
55
65
}
56
66
57
67
58
- $ self ->room ($ room )->emit ($ event , array ($ transport , $ message ));
68
+ $ self ->room ($ room )->emit (" unsubscribe " , array ($ transport , $ message ));
59
69
$ self ->emit ($ event , array ($ transport , $ message ));
60
70
});
61
71
}
0 commit comments