Exemple #1
0
 public function refreshChannel($channelId)
 {
     /** @var Channel $channel */
     $this->apiCall('channels.info', ['channel' => $channelId])->then(function (Payload $response) {
         $channel = new Channel($this, $response['channel']);
         $this->channels[$channel->getId()] = $channel;
     });
 }
Exemple #2
0
 public function testGetCreator()
 {
     $creator = new User($this->client, ['id' => $this->faker->uuid]);
     $channel = new Channel($this->client, ['creator' => $creator->getId()]);
     $this->mockResponse(200, null, ['ok' => true, 'user' => ['id' => $creator->data['id']]]);
     $this->watchPromise($channel->getCreator()->then(function (User $user) use($creator) {
         $this->assertEquals($creator->data, $user->data);
     }));
 }
 /**
  * Handles incoming websocket messages, parses them, and emits them as remote events.
  *
  * @param WebSocketMessageInterface $messageRaw A websocket message.
  */
 private function onMessage(WebSocketMessageInterface $message)
 {
     // parse the message and get the event name
     $payload = Payload::fromJson($message->getData());
     if (isset($payload['type'])) {
         switch ($payload['type']) {
             case 'hello':
                 $this->connected = true;
                 break;
             case 'team_rename':
                 $this->team->data['name'] = $payload['name'];
                 break;
             case 'team_domain_change':
                 $this->team->data['domain'] = $payload['domain'];
                 break;
             case 'channel_joined':
                 $channel = new Channel($this, $payload['channel']);
                 $this->channels[$channel->getId()] = $channel;
                 break;
             case 'channel_created':
                 $this->getChannelById($payload['channel']['id'])->then(function (Channel $channel) {
                     $this->channels[$channel->getId()] = $channel;
                 });
                 break;
             case 'channel_deleted':
                 unset($this->channels[$payload['channel']['id']]);
                 break;
             case 'channel_rename':
                 $this->channels[$payload['channel']['id']]->data['name'] = $payload['channel']['name'];
                 break;
             case 'channel_archive':
                 $this->channels[$payload['channel']['id']]->data['is_archived'] = true;
                 break;
             case 'channel_unarchive':
                 $this->channels[$payload['channel']['id']]->data['is_archived'] = false;
                 break;
             case 'group_joined':
                 $group = new Group($this, $payload['channel']);
                 $this->groups[$group->getId()] = $group;
                 break;
             case 'group_rename':
                 $this->groups[$payload['group']['id']]->data['name'] = $payload['channel']['name'];
                 break;
             case 'group_archive':
                 $this->groups[$payload['group']['id']]->data['is_archived'] = true;
                 break;
             case 'group_unarchive':
                 $this->groups[$payload['group']['id']]->data['is_archived'] = false;
                 break;
             case 'im_created':
                 $dm = new DirectMessageChannel($this, $payload['channel']);
                 $this->dms[$dm->getId()] = $dm;
                 break;
             case 'bot_added':
                 $bot = new Bot($this, $payload['bot']);
                 $this->bots[$bot->getId()] = $bot;
                 break;
             case 'bot_changed':
                 $bot = new Bot($this, $payload['bot']);
                 $this->bots[$bot->getId()] = $bot;
                 break;
         }
         // emit an event with the attached json
         $this->emit($payload['type'], [$payload]);
     } else {
         // If reply_to is set, then it is a server confirmation for a previously
         // sent message
         if (isset($payload['reply_to'])) {
             if (isset($this->pendingMessages[$payload['reply_to']])) {
                 $deferred = $this->pendingMessages[$payload['reply_to']];
                 // Resolve or reject the promise that was waiting for the reply.
                 if (isset($payload['ok']) && $payload['ok'] === true) {
                     $deferred->resolve();
                 } else {
                     $deferred->reject($payload['error']);
                 }
                 unset($this->pendingMessages[$payload['reply_to']]);
             }
         }
     }
 }