mirror of https://github.com/movim/movim
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
132 lines
3.8 KiB
132 lines
3.8 KiB
<?php
|
|
require __DIR__ . '/vendor/autoload.php';
|
|
|
|
define('DOCUMENT_ROOT', dirname(__FILE__));
|
|
require_once(DOCUMENT_ROOT.'/bootstrap.php');
|
|
|
|
$bootstrap = new Bootstrap();
|
|
$booted = $bootstrap->boot();
|
|
|
|
$loop = React\EventLoop\Factory::create();
|
|
|
|
$dnsResolverFactory = new React\Dns\Resolver\Factory();
|
|
$dns = $dnsResolverFactory->createCached('8.8.8.8', $loop);
|
|
|
|
$connector = new Ratchet\Client\Factory($loop);
|
|
|
|
$cd = new \Modl\ConfigDAO();
|
|
$config = $cd->get();
|
|
|
|
//setcookie('PHPENV', getenv('sid'), time()+3600);
|
|
/*
|
|
$connector_xmpp = new React\SocketClient\Connector($loop, $dns);
|
|
$secure_connector_xmpp = new React\SocketClient\SecureConnector($connector_xmpp, $loop);
|
|
* $secure_connector_xmpp->create('movim.eu', 5222)*/
|
|
|
|
React\Promise\all([$connector('ws://127.0.0.1:8080'), $connector($config->websocketurl, ['xmpp'])])->then(function($conns) use ($loop) {
|
|
list($conn1, $conn2) = $conns;
|
|
|
|
$logger = new \Zend\Log\Logger();
|
|
$writer = new \Zend\Log\Writer\Syslog(array('application' => 'movim_daemon'));
|
|
$logger->addWriter($writer);
|
|
|
|
$conn1->on('message', function($msg) use ($conn1, $logger, $conn2) {
|
|
if($msg != '') {
|
|
$rpc = new RPC();
|
|
$rpc->handle_json($msg);
|
|
$logger->notice("LOOP : Got message {$msg}");
|
|
|
|
$xml = \Moxl\API::commit();
|
|
\Moxl\API::clear();
|
|
|
|
if(!empty($xml)) {
|
|
$logger->notice("LOOP : Send to XMPP {$xml}");
|
|
|
|
$conn2->send(trim($xml));
|
|
}
|
|
|
|
$obj = new \StdClass;
|
|
$obj->func = 'message';
|
|
$obj->body = RPC::commit();
|
|
RPC::clear();
|
|
|
|
if(!empty($obj->body)) {
|
|
$conn1->send(json_encode($obj));
|
|
}
|
|
}
|
|
});
|
|
|
|
$conn1->on('error', function($msg) use ($conn1, $logger, $conn2, $loop) {
|
|
$logger->notice("LOOP : Got error {$msg}");
|
|
$conn2->close();
|
|
$loop->stop();
|
|
});
|
|
|
|
$conn1->on('close', function($msg) use ($conn1, $logger, $conn2, $loop) {
|
|
$logger->notice("LOOP : Got close");
|
|
if($conn2 != null) $conn2->close();
|
|
if($loop != null) $loop->stop();
|
|
});
|
|
|
|
$conn2->on('message', function($msg) use ($conn1, $logger, $conn2, $loop) {
|
|
$logger->notice("XMPP : Got message from XMPP {$msg}");
|
|
|
|
if($msg == '</stream:stream>') {
|
|
$conn2->close();
|
|
$conn1->close();
|
|
$loop->stop();
|
|
}
|
|
|
|
\Moxl\API::clear();
|
|
\RPC::clear();
|
|
|
|
\Moxl\Xec\Handler::handleStanza($msg);
|
|
|
|
$xml = \Moxl\API::commit();
|
|
\Moxl\API::clear();
|
|
|
|
if(!empty($xml)) {
|
|
$logger->notice("XMPP : Send to XMPP {$xml}");
|
|
|
|
$conn2->send(trim($xml));
|
|
}
|
|
|
|
$obj = new \StdClass;
|
|
$obj->func = 'message';
|
|
$obj->body = \RPC::commit();
|
|
\RPC::clear();
|
|
|
|
if(!empty($obj->body)) {
|
|
$out = json_encode($obj->body);
|
|
$logger->notice("XMPP : Send to LOOP {$out}");
|
|
$conn1->send($out);
|
|
}
|
|
});
|
|
|
|
$conn2->on('error', function($msg) use ($conn1, $logger, $conn2, $loop) {
|
|
$logger->notice("XMPP : Got error {$msg}");
|
|
$conn1->close();
|
|
$loop->stop();
|
|
});
|
|
|
|
$conn2->on('close', function($msg) use ($conn1, $logger, $conn2, $loop) {
|
|
$logger->notice("XMPP : Got close");
|
|
if($conn1 != null) $conn1->close();
|
|
if($loop != null) $loop->stop();
|
|
});
|
|
|
|
$obj = new \StdClass;
|
|
$obj->func = 'register_linker';
|
|
$obj->sid = getenv('sid');
|
|
|
|
$conn1->send(json_encode($obj));
|
|
|
|
}, function($e) {
|
|
$logger = new \Zend\Log\Logger();
|
|
$writer = new \Zend\Log\Writer\Syslog(array('application' => 'movim_daemon'));
|
|
$logger->addWriter($writer);
|
|
|
|
$logger->notice("LOOP : Error {$e->getMessage()}");
|
|
});
|
|
|
|
$loop->run();
|