Example #1
0
 public function createLoop($readStreamCompatible = false)
 {
     if ('Linux' === PHP_OS && !extension_loaded('posix')) {
         $this->markTestSkipped('libevent tests skipped on linux due to linux epoll issues.');
     }
     if (!extension_loaded('event')) {
         $this->markTestSkipped('ext-event tests skipped because ext-event is not installed.');
     }
     $cfg = null;
     if ($readStreamCompatible) {
         $cfg = new \EventConfig();
         $cfg->requireFeatures(\EventConfig::FEATURE_FDS);
     }
     return new ExtEventLoop($cfg);
 }
use Ratchet\WebSocket\WsServer;
use ExChat\Server as ChatServer;
use ExHttp\Server as ConnectionHandler;
use SlideBuilder\Server as SlideServer;
use SlideBuilder\Builder as SlideBuilder;
use ExHttp\Router;
use ExHttp\StaticFile;
use EventConfig as EventBaseConfig;
/* 
	Using Select Loop due to LibEvent epolling which doesn't work with file reads 
	@see http://stackoverflow.com/questions/5456967/problem-handling-file-i-o-with-libevent2
	@todo look at possibly using libev
*/
//$loop 			= new React\EventLoop\StreamSelectLoop();
$cfg = new \EventConfig();
$cfg->requireFeatures(EventBaseConfig::FEATURE_FDS);
$loop = new React\EventLoop\ExtEventLoop($cfg);
$documentRoot = getcwd();
$slidesDir = $documentRoot . DIRECTORY_SEPARATOR . 'slides';
echo "Watching directory: " . $documentRoot . PHP_EOL;
/* 
	slide server and builder 
*/
$slideBuilder = new SlideBuilder($loop, $slidesDir);
$slideServer = new SlideServer($slideBuilder);
/* 
	Directory monitor 
*/
$inotify = new MKraemer\ReactInotify\Inotify($loop);
$inotify->add($documentRoot . '/slides/', IN_CREATE | IN_DELETE | IN_MODIFY);
$inotify->on(IN_MODIFY, array($slideBuilder, 'buildSlides'));
 * To run, you will need to make sure you have sudo access as it is currently
 * configured to run the web server on port 80 and have port 8080 accessible
 * as that is where the websocket server is configured to listen.
 *
 * when done, point your browser to port 80 of your machine and you should see
 * a little avatar pop up - add more browsers to see more avatars.
 *
 * To chat simply enter a message and hit enter or press the send button.
 */
require_once '/var/www/reactphp/vendor/autoload.php';
use ExHttp\Server as ConnectionHandler;
use ExHttp\StaticFile;
use Ratchet\Server\IoServer;
use Ratchet\Http\HttpServer;
use Ratchet\WebSocket\WsServer;
$cfg = new \EventConfig();
$cfg->requireFeatures(\EventConfig::FEATURE_FDS);
$loop = new React\EventLoop\ExtEventLoop($cfg);
$documentRoot = getcwd();
// Set up our WebSocket server for clients wanting real-time updates
$webSock = new React\Socket\Server($loop);
$webSock->listen(8080, '0.0.0.0');
// Binding to 0.0.0.0 means remotes can connect
$webServer = new Ratchet\Server\IoServer(new Ratchet\Http\HttpServer(new Ratchet\WebSocket\WsServer(new Ratchet\Wamp\WampServer(new ExGame\Server()))), $webSock);
$router = new ExHttp\Router();
$fileHandler = new StaticFile($documentRoot, $loop);
$router->setFileHandler($fileHandler);
$httpSocket = new React\Socket\Server($loop);
$httpSocket->listen(81, '0.0.0.0');
$httpServer = new IoServer(new HttpServer(new ConnectionHandler($router)), $httpSocket, $loop);
$loop->run();