Пример #1
0
 /**
  * @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]);
     });
 }
Пример #2
0
 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());
 }