Example #1
0
 public function connect()
 {
     $restapi = new RestApi();
     $result = $restapi->request('https://slack.com/api/rtm.start', array('get' => array('token' => $this->oauth_token)));
     if (is_object($result) && !empty($result->url)) {
         $loop = \React\EventLoop\Factory::create();
         $logger = new \Zend\Log\Logger();
         if ($this->debug) {
             $writer = new \Zend\Log\Writer\Stream("php://output");
         } else {
             $writer = new \Zend\Log\Writer\Noop();
         }
         $logger->addWriter($writer);
         $this->client = $client = new \Devristo\Phpws\Client\WebSocket($result->url, $loop, $logger);
         $client->on("connect", function () use($logger, $client) {
             $logger->notice("Connected");
         });
         $client->on("message", function ($message) use($client, $logger) {
             $event = json_decode($message->getData());
             if (!is_object($event)) {
                 $logger->warning("Invalid JSON");
                 return;
             }
             $logger->notice("Received message:\n" . print_r($event, true));
             if (isset($event->type) && $event->type == 'message' && empty($event->subtype)) {
                 $user = $event->user;
                 // TODO: get username
                 $channel = $event->channel;
                 $message = $event->text;
                 $message = preg_replace('/<(http[^\\|]+)\\|[^>]+>/', '$1', $message);
                 $message = preg_replace('/<(http[^\\>]+)>/', '$1', $message);
                 $communication = array('user_name' => $user, 'text' => $message, 'bot_type' => 'slack');
                 if ($response = $this->respond($communication)) {
                     $responseEvent = array('id' => $this->id, 'type' => 'message', 'channel' => $channel, 'text' => $response);
                     $logger->notice("Sending message:\n" . print_r($responseEvent, true));
                     $client->send(json_encode($responseEvent));
                 }
             }
         });
         $loop->addPeriodicTimer(5, function () use($client, $logger) {
             $id = ++$this->id;
             $logger->info('Sending ping');
             $event = array('id' => $id, 'type' => 'ping');
             $client->send(json_encode($event));
         });
         $client->open();
         $loop->run();
     }
 }
Example #2
0
<?php

/**
 * Connect to the echo.websocket.org server and check whether our message is echoed back
 *
 * User: Chris
 * Date: 30-9-13
 * Time: 21:05
 */
require_once __DIR__ . "/../vendor/autoload.php";
$loop = \React\EventLoop\Factory::create();
$logger = new \Zend\Log\Logger();
$writer = new Zend\Log\Writer\Stream("php://output");
$logger->addWriter($writer);
$client = new \Devristo\Phpws\Client\WebSocket("ws://echo.websocket.org/?encoding=text", $loop, $logger);
//$client = new \Devristo\Phpws\Client\WebSocket("ws://google.com", $loop, $logger);
$client->on("connect", function () use($logger, $client) {
    $logger->notice("Or we can use the connect event!");
    $client->send("Hello world!");
});
$client->on("message", function ($message) use($client, $logger) {
    $logger->notice("Got message: " . $message->getData());
    $client->close();
});
$client->open()->then(function () use($logger, $client) {
    $logger->notice("We can use a promise to determine when the socket has been connected!");
});
$loop->run();
Example #3
0
 public static function sendMessage($message)
 {
     try {
         $config = \SciActive\RequirePHP::_('NymphPubSubConfig');
         $loop = \React\EventLoop\Factory::create();
         $logger = new \Zend\Log\Logger();
         $writer = new \Zend\Log\Writer\Stream("php://stderr");
         $logger->addWriter($writer);
         foreach ($config['entries'] as $host) {
             $client = new \Devristo\Phpws\Client\WebSocket($host, $loop, $logger);
             $client->on("connect", function () use($message, $client) {
                 $client->send($message);
                 $client->close();
             });
             $client->open();
         }
         $loop->run();
     } catch (\React\SocketClient\ConnectionException $e) {
         // Ignore a failed connection.
     }
 }
Example #4
0
 /**
  * Extends listen()
  *
  * @param string  $url       Web Socket URL
  * @param array   $sockConf  Web Socket Configuration
  * @param closure $callback  Anonymous method to return frames to
  *
  * @return void
  */
 private function _listen($url, $sockConf, $callback)
 {
     // connecting to websocket server
     $client = new \Devristo\Phpws\Client\WebSocket($url . '&sid=' . $sockConf[1], $this->_loop, Logger::getInstance(), array('http' => array('header' => 'Cookie:' . $sockConf[0])));
     // request
     $client->on("request", function ($headers) {
         // object created
         Logger::notice("[SOCKET] Request object created!");
     });
     // handshake
     $client->on("handshake", function () {
         // handshake made with server
         Logger::notice("[SOCKET] Handshake received!");
     });
     // connect
     $client->on("connect", function () use($client) {
         // connected to websocket
         Logger::notice("[SOCKET] Connected to Websocket!");
         // request connection
         $client->send('2probe');
     });
     // message
     $client->on("message", function ($message) use($client, $url, $sockConf, $callback) {
         // store data in frame
         $frame = $message->getData();
         // if socket has died out
         $this->handleFrame($frame, $client, $callback);
     });
     // start client listener
     $client->open();
     // start looping requests
     $this->_loop->run();
 }
 /**
  * Relay publish data to other servers.
  *
  * @param string $message The publish data to relay.
  */
 private function relay($message)
 {
     $config = \SciActive\RequirePHP::_('NymphPubSubConfig');
     if (!$config['relays']) {
         return;
     }
     $loop = \React\EventLoop\Factory::create();
     $logger = new \Zend\Log\Logger();
     $writer = new \Zend\Log\Writer\Stream("php://stderr");
     $logger->addWriter($writer);
     foreach ($config['relays'] as $host) {
         $client = new \Devristo\Phpws\Client\WebSocket($host, $loop, $logger);
         $client->on("connect", function () use($message, $client) {
             $client->send($message);
             $client->close();
         });
         $client->open();
     }
     $loop->run();
 }