/** * @param StackTransport $transport */ public function listenTo(StackTransport $transport) { $self = $this; $transport->on("message", function (RemoteEventMessage $message) use($transport, $self) { $room = $message->getRoom(); if (!$room) { return; } $event = $message->getEvent(); if ($message->getEvent() == 'subscribe') { $self->room($room)->subscribe($transport); // If the transport is disconnected, make sure we 'fake' the unsubscribe $transport->getWebSocketTransport()->on("close", function () use($self, $transport, $room) { $self->room($room)->unsubscribe($transport); // Fake unsubscribe message $message = new RemoteEventMessage(); $message->setEvent("unsubscribe"); $message->setRoom($room); $self->emit("unsubscribe", [$transport, $message]); $self->room($room)->emit("unsubscribe", [$transport, $message]); }); } elseif ($message->getEvent() == 'unsubscribe') { $self->room($room)->unsubscribe($transport); } $self->room($room)->emit($message->getEvent(), [$transport, $message]); $self->emit($event, [$transport, $message]); }); }
public function replyTo(RemoteEventMessage $message, $data) { $reply = new RemoteEventMessage(); $reply->setRoom($message->getRoom()); $reply->setTag($message->getTag()); $reply->setEvent($message->getEvent()); $reply->setData($data); $this->carrierProtocol->sendString($reply->toJson()); }