getContainer()->get('config'); $categoriesData = $app->getContainer()->get('metadata')->get(['app', 'webSocket', 'categories'], []); $phpExecutablePath = $config->get('phpExecutablePath'); $isDebugMode = (bool) $config->get('webSocketDebugMode'); $loop = \React\EventLoop\Factory::create(); $pusher = new \Espo\Core\WebSocket\Pusher($categoriesData, $phpExecutablePath, $isDebugMode); $context = new \React\ZMQ\Context($loop); $pull = $context->getSocket(\ZMQ::SOCKET_PULL); $pull->bind('tcp://127.0.0.1:5555'); $pull->on('message', [$pusher, 'onMessageReceive']); $useSsl = false; $port = null; $webSocketUrl = $config->get('webSocketUrl'); if ($webSocketUrl) { if (stripos($webSocketUrl, 'wss://') === 0) { $useSsl = true; } $port = parse_url($webSocketUrl, \PHP_URL_PORT); } else { $siteUrl = $config->get('siteUrl'); if ($siteUrl && stripos($siteUrl, 'https://') === 0) { $useSsl = true; } } if (!$port) { $port = $useSsl ? '8443' : '8080'; } $webSocket = new \React\Socket\Server('0.0.0.0:'.$port, $loop); if ($useSsl) { $webSocket = new \React\Socket\SecureServer( $webSocket, $loop, [ 'local_cert' => $config->get('webSocketSslCertificateFile'), 'local_pk' => $config->get('webSocketSslCertificateKeyFile'), 'allow_self_signed' => $config->get('webSocketSslAllowSelfSigned', false), 'verify_peer' => false, ] ); } $webServer = new \Ratchet\Server\IoServer( new \Ratchet\Http\HttpServer( new \Ratchet\WebSocket\WsServer( new \Ratchet\Wamp\WampServer($pusher) ) ), $webSocket ); $loop->run();