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

11 years ago
  1. <?php
  2. require __DIR__ . '/vendor/autoload.php';
  3. define('DOCUMENT_ROOT', dirname(__FILE__));
  4. require_once(DOCUMENT_ROOT.'/bootstrap.php');
  5. $bootstrap = new Bootstrap();
  6. $booted = $bootstrap->boot();
  7. $loop = React\EventLoop\Factory::create();
  8. $dnsResolverFactory = new React\Dns\Resolver\Factory();
  9. $dns = $dnsResolverFactory->createCached('8.8.8.8', $loop);
  10. $connector = new Ratchet\Client\Factory($loop);
  11. $cd = new \Modl\ConfigDAO();
  12. $config = $cd->get();
  13. //setcookie('PHPENV', getenv('sid'), time()+3600);
  14. /*
  15. $connector_xmpp = new React\SocketClient\Connector($loop, $dns);
  16. $secure_connector_xmpp = new React\SocketClient\SecureConnector($connector_xmpp, $loop);
  17. * $secure_connector_xmpp->create('movim.eu', 5222)*/
  18. React\Promise\all([$connector('ws://127.0.0.1:8080'), $connector($config->websocketurl, ['xmpp'])])->then(function($conns) use ($loop) {
  19. list($conn1, $conn2) = $conns;
  20. $logger = new \Zend\Log\Logger();
  21. $writer = new \Zend\Log\Writer\Syslog(array('application' => 'movim_daemon'));
  22. $logger->addWriter($writer);
  23. $conn1->on('message', function($msg) use ($conn1, $logger, $conn2) {
  24. if($msg != '') {
  25. $rpc = new RPC();
  26. $rpc->handle_json($msg);
  27. $logger->notice("LOOP : Got message {$msg}");
  28. $xml = \Moxl\API::commit();
  29. \Moxl\API::clear();
  30. if(!empty($xml)) {
  31. $logger->notice("LOOP : Send to XMPP {$xml}");
  32. $conn2->send(trim($xml));
  33. }
  34. $obj = new \StdClass;
  35. $obj->func = 'message';
  36. $obj->body = RPC::commit();
  37. RPC::clear();
  38. if(!empty($obj->body)) {
  39. $conn1->send(json_encode($obj));
  40. }
  41. }
  42. });
  43. $conn1->on('error', function($msg) use ($conn1, $logger, $conn2, $loop) {
  44. $logger->notice("LOOP : Got error {$msg}");
  45. $conn2->close();
  46. $loop->stop();
  47. });
  48. $conn1->on('close', function($msg) use ($conn1, $logger, $conn2, $loop) {
  49. $logger->notice("LOOP : Got close");
  50. if($conn2 != null) $conn2->close();
  51. if($loop != null) $loop->stop();
  52. });
  53. $conn2->on('message', function($msg) use ($conn1, $logger, $conn2, $loop) {
  54. $logger->notice("XMPP : Got message from XMPP {$msg}");
  55. if($msg == '</stream:stream>') {
  56. $conn2->close();
  57. $conn1->close();
  58. $loop->stop();
  59. }
  60. \Moxl\API::clear();
  61. \RPC::clear();
  62. \Moxl\Xec\Handler::handleStanza($msg);
  63. $xml = \Moxl\API::commit();
  64. \Moxl\API::clear();
  65. $obj = new \StdClass;
  66. $obj->func = 'message';
  67. $obj->body = \RPC::commit();
  68. $out = json_encode($obj->body);
  69. $logger->notice("XMPP : Send to LOOP {$out}");
  70. \RPC::clear();
  71. if(!empty($obj->body)) {
  72. $conn1->send(json_encode($obj));
  73. }
  74. if(!empty($xml)) {
  75. $logger->notice("XMPP : Send to XMPP {$xml}");
  76. $conn2->send(trim($xml));
  77. }
  78. });
  79. $conn2->on('error', function($msg) use ($conn1, $logger, $conn2, $loop) {
  80. $logger->notice("XMPP : Got error {$msg}");
  81. $conn1->close();
  82. $loop->stop();
  83. });
  84. $conn2->on('close', function($msg) use ($conn1, $logger, $conn2, $loop) {
  85. $logger->notice("XMPP : Got close");
  86. if($conn1 != null) $conn1->close();
  87. if($loop != null) $loop->stop();
  88. });
  89. $obj = new \StdClass;
  90. $obj->func = 'register_linker';
  91. $obj->sid = getenv('sid');
  92. $conn1->send(json_encode($obj));
  93. }, function($e) {
  94. $logger = new \Zend\Log\Logger();
  95. $writer = new \Zend\Log\Writer\Syslog(array('application' => 'movim_daemon'));
  96. $logger->addWriter($writer);
  97. $logger->notice("LOOP : Error {$e->getMessage()}");
  98. });
  99. $loop->run();