-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathZMQ.php
More file actions
106 lines (85 loc) · 3.34 KB
/
ZMQ.php
File metadata and controls
106 lines (85 loc) · 3.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
<?php
/**
* Elite Dangerous Star Map
* @link https://www.edsm.net/
*/
define('APPLICATION_CLI', 'ZMQ');
require_once dirname(__FILE__) . '/../EDSM/BootstrapCLI.php';
/**
* START
*/
$relayEDDN = 'tcp://eddn.edcd.io:9500';
// Grab database cache
$bootstrap = Zend_Registry::get('Zend_Application');
$cacheManager = $bootstrap->getResource('cachemanager');
$cache = $cacheManager->getCache('eddn');
// Add logger
EDSM_Api_Logger::setCache('lastEDDNAction', $cache);
EDSM_Api_Logger::log('');
EDSM_Api_Logger::log('Starting EDDN task (' . APPLICATION_ENV . ')');
EDSM_Api_Logger::log('');
$context = new ZMQContext();
$socket = $context->getSocket(ZMQ::SOCKET_SUB);
$socket->setSockOpt(ZMQ::SOCKOPT_SUBSCRIBE, "");
$socket->setSockOpt(ZMQ::SOCKOPT_RCVTIMEO, 600000);
$messagesDefault = array('batch' => true, 'messages' => array());
$messagesBatch = 500;
$messagesBatchTime = 20;
$messages = $messagesDefault;
$lastTimeMessages = time();
while (true)
{
try
{
$socket->connect($relayEDDN);
EDSM_Api_Logger::log('');
EDSM_Api_Logger::log('<span class="text-success">Connecting to: ' . $relayEDDN . '</span>');
EDSM_Api_Logger::log('');
while(true)
{
$message = $socket->recv();
if($message === false)
{
$socket->disconnect($relayEDDN);
EDSM_Api_Logger::log('');
EDSM_Api_Logger::log('<span class="text-danger">Disconnecting from: ' . $relayEDDN . '</span>');
EDSM_Api_Logger::log('');
break;
}
$messages['messages'][] = $message;
if(count($messages['messages']) >= $messagesBatch || time() > ($lastTimeMessages + $messagesBatchTime))
{
// Create message temp cache
$cacheKey = 'EDDN_' . sha1(microtime()) . '_' . mt_rand();
while($cache->load($cacheKey) !== false)
{
$cacheKey = 'EDDN_' . sha1(microtime()) . '_' . mt_rand();
}
// Save messages batch
$cache->save($messages, $cacheKey, array(), 300);
// Execute message batch handle
EDSM_Api_Logger::log('<span class="text-success">Execute batch (' . count($messages['messages']) . '): ' . $cacheKey . '</span>');
exec('/usr/bin/php7.4 -f ' . LIBRARY_PATH . '/EDDN/EDDN.php -- "' . $cacheKey . '" > /dev/null 2>&1 &');
// Purge messages and reset timer
$messages = $messagesDefault;
$lastTimeMessages = time();
if(file_exists(APPLICATION_PATH . '/Data/edsm.eddn.stop'))
{
unlink(APPLICATION_PATH . '/Data/edsm.eddn.stop');
EDSM_Api_Logger::log('');
EDSM_Api_Logger::log('<span class="text-danger">Stop signal (' . APPLICATION_ENV . ')</span>');
exit();
}
}
}
}
catch (ZMQSocketException $e)
{
EDSM_Api_Logger::log('');
EDSM_Api_Logger::log('ZMQSocketException: ' . $e);
EDSM_Api_Logger::log('');
sleep(10);
}
}
// Exit correctly
exit(0);