public function run() { if (!isset($this->params['token'])) { throw new \Exception('A token must be set. Please see https://my.slack.com/services/new/bot'); } $this->loadInternalCommands(); $this->init(); $logger = new \Zend\Log\Logger(); $writer = new \Zend\Log\Writer\Stream("php://output"); $logger->addWriter($writer); $loop = \React\EventLoop\Factory::create(); $client = new \Devristo\Phpws\Client\WebSocket($this->wsUrl, $loop, $logger); $client->on("request", function ($headers) use($logger) { $logger->notice("Request object created!"); }); $client->on("handshake", function () use($logger) { $logger->notice("Handshake received!"); }); $client->on("connect", function () use($logger, $client) { $logger->notice("Connected!"); }); $client->on("message", function ($message) use($client, $logger) { $data = $message->getData(); $logger->notice("Got message: " . $data); $data = json_decode($data, true); $command = $this->getCommand($data); if ($command instanceof Command\BaseCommand) { $command->setClient($client); $command->setChannel($data['channel']); $command->setUser($data['user']); $command->setContext($this->context); $command->executeCommand($data, $this->context); } }); $client->open(); /* Webserver */ if ($this->webserverPort !== false) { $logger->notice("Listening on port " . $this->webserverPort); $socket = new \React\Socket\Server($loop); $http = new \React\Http\Server($socket); $http->on('request', function ($request, $response) use($client) { $post = $request->getPost(); if ($post['name'] == 'output') { $hook = new \PhpSlackBot\Webhook\OutputWebhook(); $hook->setClient($client); $hook->setContext($this->context); $hook->executeWebhook(json_decode($post['payload'], true)); } $response->writeHead(200, array('Content-Type' => 'text/plain')); $response->end("Ok\n"); }); $socket->listen(8080); } $loop->run(); }
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(); } }
public function __construct($token, $channel) { $loop = \React\EventLoop\Factory::create(); $logger = new \Zend\Log\Logger(); $writer = new Zend\Log\Writer\Stream("php://output"); $logger->addWriter($writer); $this->client = new \Devristo\Phpws\Client\WebSocket($url, $loop, $logger); $this->client->on("request", function ($headers) use($logger) { $logger->notice("Request object created!"); }); $this->client->on("handshake", function () use($logger) { $logger->notice("Handshake received!"); }); $this->client->on("connect", function ($headers) use($logger, $client) { $logger->notice("Connected!"); }); $this->client->on("message", function ($message) use($client, $logger) { $logger->notice("Got message: " . $message->getData()); }); }
use Devristo\Phpws\Server\WebSocketServer; $loop = \React\EventLoop\Factory::create(); // Create a logger which writes everything to the STDOUT $logger = new \Zend\Log\Logger(); $writer = new Zend\Log\Writer\Stream("php://output"); $logger->addWriter($writer); // Create a WebSocket server and create a router which sends all user requesting /echo to the DemoEchoHandler above $server = new WebSocketServer("tcp://0.0.0.0:12345", $loop, $logger); $handler = new \Devristo\Phpws\RemoteEvent\RemoteEvents($logger); $server->on("connect", function (TransportInterface $transport) use($loop, $logger, $handler) { $stack = StackTransport::create($transport, array(function (TransportInterface $transport) use($loop, $logger) { return new RemoteEventTransport($transport, $loop, $logger); })); $handler->listenTo($stack); }); $handler->room("time")->on("subscribe", function (StackTransport $transport) use($logger, $handler) { $logger->notice("Someone joined our room full of time enthousiasts!!"); }); // Each 0.5 seconds sent the time to all connected clients $loop->addPeriodicTimer(0.5, function () use($server, $handler, $logger) { $time = new DateTime(); $string = $time->format("Y-m-d H:i:s"); if (count($handler->room("time")->getMembers())) { $logger->notice("Broadcasting time to time room: {$string}"); } $handler->room("time")->remoteEmit("time", $string); }); // Bind the server $server->bind(); // Start the event loop $loop->run();
public function run() { if (!isset($this->params['token'])) { throw new \Exception('A token must be set. Please see https://my.slack.com/services/new/bot'); } $this->init(); $logger = new \Zend\Log\Logger(); $writer = new \Zend\Log\Writer\Stream("php://output"); $logger->addWriter($writer); $loop = \React\EventLoop\Factory::create(); $client = new \Devristo\Phpws\Client\WebSocket($this->wsUrl, $loop, $logger); $client->on("request", function ($headers) use($logger) { $logger->notice("Request object created!"); }); $client->on("handshake", function () use($logger) { $logger->notice("Handshake received!"); }); $client->on("connect", function () use($logger, $client) { $logger->notice("Connected!"); }); $client->on("message", function ($message) use($client, $logger) { $data = $message->getData(); $logger->notice("Got message: " . $data); $data = json_decode($data, true); if (count($this->catchAllCommands)) { foreach ($this->catchAllCommands as $command) { $command->setClient($client); $command->setContext($this->context); $command->executeCommand($data, $this->context); } } $command = $this->getCommand($data); if ($command instanceof Command\BaseCommand) { $command->setClient($client); $command->setChannel($data['channel']); $command->setUser($data['user']); $command->setContext($this->context); $command->executeCommand($data, $this->context); } }); $client->open(); /* Webserver */ if (null !== $this->webserverPort) { $logger->notice("Listening on port " . $this->webserverPort); $socket = new \React\Socket\Server($loop); $http = new \React\Http\Server($socket); $http->on('request', function ($request, $response) use($client) { $request->on('data', function ($data) use($client, $request, $response) { parse_str($data, $post); if ($this->authentificationToken === null || $this->authentificationToken !== null && isset($post['auth']) && $post['auth'] === $this->authentificationToken) { if (isset($post['name']) && is_string($post['name']) && isset($this->webhooks[$post['name']])) { $hook = $this->webhooks[$post['name']]; $hook->setClient($client); $hook->setContext($this->context); $hook->executeWebhook(json_decode($post['payload'], true), $this->context); $response->writeHead(200, array('Content-Type' => 'text/plain')); $response->end("Ok\n"); } else { $response->writeHead(404, array('Content-Type' => 'text/plain')); $response->end("No webhook found\n"); } } else { $response->writeHead(403, array('Content-Type' => 'text/plain')); $response->end(""); } }); }); $socket->listen($this->webserverPort); } $loop->run(); }
#!/php -q <?php require_once "../vendor/autoload.php"; use Devristo\Phpws\Messaging\WebSocketMessageInterface; use Devristo\Phpws\Protocol\WebSocketTransportInterface; use Devristo\Phpws\Server\WebSocketServer; $loop = \React\EventLoop\Factory::create(); // Create a logger which writes everything to the STDOUT $logger = new \Zend\Log\Logger(); $writer = new Zend\Log\Writer\Stream("php://output"); $logger->addWriter($writer); // Create a WebSocket server using SSL $server = new WebSocketServer("ssl://0.0.0.0:12345", $loop, $logger); $context = stream_context_create(); stream_context_set_option($context, 'ssl', 'local_cert', "democert.pem"); stream_context_set_option($context, 'ssl', 'allow_self_signed', true); stream_context_set_option($context, 'ssl', 'verify_peer', false); $server->setStreamContext($context); // Sent a welcome message when a client connects $server->on("connect", function (WebSocketTransportInterface $user) { $user->sendString("Hey! I am the echo robot. I will repeat all your input!"); }); // Echo back any message the user sends $server->on("message", function (WebSocketTransportInterface $user, WebSocketMessageInterface $message) use($logger) { $logger->notice(sprintf("We have got '%s' from client %s", $message->getData(), $user->getId())); $user->sendString($message->getData()); }); // Bind the server $server->bind(); // Start the event loop $loop->run();
<?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();
#!/php -q <?php require_once "../vendor/autoload.php"; use Devristo\Phpws\Server\WebSocketServer; $loop = \React\EventLoop\Factory::create(); // Create a logger which writes everything to the STDOUT $logger = new \Zend\Log\Logger(); $writer = new Zend\Log\Writer\Stream("php://output"); $logger->addWriter($writer); // Create a WebSocket server using SSL $server = new WebSocketServer("tcp://0.0.0.0:12345", $loop, $logger); // Each 0.5 seconds sent the time to all connected clients $loop->addPeriodicTimer(0.5, function () use($server, $logger) { $time = new DateTime(); $string = $time->format("Y-m-d H:i:s"); $logger->notice("Broadcasting time to all clients: {$string}"); foreach ($server->getConnections() as $client) { $client->sendString($string); } }); // Bind the server $server->bind(); // Start the event loop $loop->run();
<?php require_once '../vendor/autoload.php'; if (!file_exists('config.php')) { die('Please create a config.php file that creates a properly defined Pusher object called $pusher and places it in the global scope. <?php $pusher = new Pusher("123123", "12312, "123123"); ?>. You can probably just copy it from your Pusher PHP example source page.'); } require_once 'config.php'; $adapter = new Eschrade\PusherLogger\PusherAdapter(); $adapter->setPusher($pusher); $logger = new Zend\Log\Logger(); $logger->addWriter($adapter); $logger->debug('This is a test debug'); $logger->crit('This is a test crit'); $logger->err('This is a test error'); $logger->notice('This is a test notice'); $logger->warn('This is a test warn'); $logger->info('This is a test info');