Update clients so both versions have same output

This commit is contained in:
AnthorNet 2015-04-29 14:22:26 +02:00
parent 341266357f
commit 8d150171e1
4 changed files with 288 additions and 67 deletions

1
.gitignore vendored
View File

@ -52,4 +52,3 @@ docs/_build/
# PyBuilder
target/
*.htm

2
examples/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
*.htm
*.log

View File

@ -3,7 +3,15 @@
* Configuration
*/
$relayEDDN = 'tcp://eddn-relay.elite-markets.net:9500';
$logFile = dirname(__FILE__) . '/Logs_EDDN_%DATE%.htm';
$timeoutEDDN = 600000;
// Set to false if you do not want verbose logging
$logVerboseFile = dirname(__FILE__) . '/Logs_Verbose_EDDN_%DATE%.htm';
//$logVerboseFile = false;
// Set to false if you do not want JSON logging
$logJSONFile = dirname(__FILE__) . '/Logs_JSON_EDDN_%DATE%.log';
//$logJSONFile = false;
// A sample list of authorised softwares
$authorisedSoftwares = array(
@ -19,21 +27,23 @@ $excludedSoftwares = array(
'My Awesome Market Uploader'
);
/**
* START
*/
$oldTime = false;
function echoLog($str)
{
global $oldTime, $logFile;
global $oldTime, $logVerboseFile;
$logFileParsed = str_replace('%DATE%', date('Y-m-d'), $logFile);
if($logVerboseFile !== false)
$logVerboseFileParsed = str_replace('%DATE%', date('Y-m-d'), $logVerboseFile);
if(!file_exists($logFileParsed))
if($logVerboseFile !== false && !file_exists($logVerboseFileParsed))
{
file_put_contents(
$logFileParsed,
$logVerboseFileParsed,
'<style type="text/css">html { white-space: pre; font-family: Courier New,Courier,Lucida Sans Typewriter,Lucida Typewriter,monospace; }</style>'
);
}
@ -48,82 +58,101 @@ function echoLog($str)
fwrite(STDOUT, $str . PHP_EOL);
file_put_contents(
$logFileParsed,
$str . PHP_EOL,
FILE_APPEND
);
if($logVerboseFile !== false)
file_put_contents(
$logVerboseFileParsed,
$str . PHP_EOL,
FILE_APPEND
);
}
function echoLogJSON($json)
{
global $logJSONFile;
if($logJSONFile !== false)
{
$logJSONFileParsed = str_replace('%DATE%', date('Y-m-d'), $logJSONFile);
file_put_contents(
$logJSONFileParsed,
$json . PHP_EOL,
FILE_APPEND
);
}
}
// UTC
date_default_timezone_set('UTC');
echoLog('Starting EDDN Subscribe');
echoLog('Starting EDDN Subscriber');
echoLog('');
$context = new ZMQContext();
$socket = $context->getSocket(ZMQ::SOCKET_SUB);
$socket->setSockOpt(ZMQ::SOCKOPT_SUBSCRIBE, "");
$socket->setSockOpt(ZMQ::SOCKOPT_RCVTIMEO, 600000);
$context = new ZMQContext();
$subscriber = $context->getSocket(ZMQ::SOCKET_SUB);
$subscriber->setSockOpt(ZMQ::SOCKOPT_SUBSCRIBE, "");
$subscriber->setSockOpt(ZMQ::SOCKOPT_RCVTIMEO, $timeoutEDDN);
while (true)
{
try
{
$socket->connect($relayEDDN);
$subscriber->connect($relayEDDN);
while (true)
{
$message = $socket->recv();
$message = $subscriber->recv();
if ($message === false)
{
$socket->disconnect($relayEDDN);
$subscriber->disconnect($relayEDDN);
break;
}
$json = zlib_decode($message);
$array = json_decode($json, true);
$message = zlib_decode($message);
$json = json_decode($message, true);
$converted = false;
// Handle commodity v1
if($array['$schemaRef'] == 'http://schemas.elite-markets.net/eddn/commodity/1')
if($json['$schemaRef'] == 'http://schemas.elite-markets.net/eddn/commodity/1')
{
echoLogJSON($message);
echoLog('Receiving commodity-v1 message...');
echoLog(' - Converting to v2...');
$temp = array();
$temp['$schemaRef'] = 'http://schemas.elite-markets.net/eddn/commodity/2';
$temp['header'] = $array['header'];
$temp['header'] = $json['header'];
$temp['message'] = array();
$temp['message']['systemName'] = $array['message']['systemName'];
$temp['message']['stationName'] = $array['message']['stationName'];
$temp['message']['timestamp'] = $array['message']['timestamp'];
$temp['message']['systemName'] = $json['message']['systemName'];
$temp['message']['stationName'] = $json['message']['stationName'];
$temp['message']['timestamp'] = $json['message']['timestamp'];
$temp['message']['commodities'] = array();
$commodity = array();
if(array_key_exists('itemName', $array['message']))
$commodity['name'] = $array['message']['itemName'];
if(array_key_exists('itemName', $json['message']))
$commodity['name'] = $json['message']['itemName'];
if(array_key_exists('buyPrice', $array['message']))
$commodity['buyPrice'] = $array['message']['buyPrice'];
if(array_key_exists('stationStock', $array['message']))
$commodity['supply'] = $array['message']['stationStock'];
if(array_key_exists('supplyLevel', $array['message']))
$commodity['supplyLevel'] = $array['message']['supplyLevel'];
if(array_key_exists('buyPrice', $json['message']))
$commodity['buyPrice'] = $json['message']['buyPrice'];
if(array_key_exists('stationStock', $json['message']))
$commodity['supply'] = $json['message']['stationStock'];
if(array_key_exists('supplyLevel', $json['message']))
$commodity['supplyLevel'] = $json['message']['supplyLevel'];
if(array_key_exists('sellPrice', $array['message']))
$commodity['sellPrice'] = $array['message']['sellPrice'];
if(array_key_exists('demand', $array['message']))
$commodity['demand'] = $array['message']['demand'];
if(array_key_exists('demandLevel', $array['message']))
$commodity['demandLevel'] = $array['message']['demandLevel'];
if(array_key_exists('sellPrice', $json['message']))
$commodity['sellPrice'] = $json['message']['sellPrice'];
if(array_key_exists('demand', $json['message']))
$commodity['demand'] = $json['message']['demand'];
if(array_key_exists('demandLevel', $json['message']))
$commodity['demandLevel'] = $json['message']['demandLevel'];
$temp['message']['commodities'][] = $commodity;
$array = $temp;
$json = $temp;
unset($temp, $commodity);
$converted = true;
@ -131,21 +160,23 @@ while (true)
// Handle commodity v2
if($array['$schemaRef'] == 'http://schemas.elite-markets.net/eddn/commodity/2')
if($json['$schemaRef'] == 'http://schemas.elite-markets.net/eddn/commodity/2')
{
if($converted === false)
{
echoLogJSON($message);
echoLog('Receiving commodity-v2 message...');
unset($converted);
}
$authorised = false;
$excluded = false;
if(in_array($array['header']['softwareName'], $authorisedSoftwares))
if(in_array($json['header']['softwareName'], $authorisedSoftwares))
$authorised = true;
if(in_array($array['header']['softwareName'], $excludedSoftwares))
if(in_array($json['header']['softwareName'], $excludedSoftwares))
$excluded = true;
echoLog(' - Software: ' . $array['header']['softwareName'] . ' / ' . $array['header']['softwareVersion']);
echoLog(' - Software: ' . $json['header']['softwareName'] . ' / ' . $json['header']['softwareVersion']);
echoLog(' - ' . (($authorised === true)
? 'AUTHORISED'
: (( $excluded === true) ? 'EXCLUDED' : 'UNAUTHORISED')
@ -157,21 +188,21 @@ while (true)
// Have fun !
// For example
echoLog(' - Timestamp: ' . $array['message']['timestamp']);
echoLog(' - System Name: ' . $array['message']['systemName']);
echoLog(' - Station Name: ' . $array['message']['stationName']);
echoLog(' - Timestamp: ' . $json['message']['timestamp']);
echoLog(' - System Name: ' . $json['message']['systemName']);
echoLog(' - Station Name: ' . $json['message']['stationName']);
foreach($array['message']['commodities'] AS $commodity)
foreach($json['message']['commodities'] AS $commodity)
{
echoLog(' - Name: ' . $commodity['name']);
echoLog(' - Buy Price: ' . $commodity['buyPrice']);
echoLog(' - Supply: ' . $commodity['supply'] . (
(array_key_exists('supplyLevel', $commodity)) ? ' (' . $commodity['supplyLevel'] . ')' : ''
));
echoLog(' - Supply: ' . $commodity['supply']
. ((array_key_exists('supplyLevel', $commodity)) ? ' (' . $commodity['supplyLevel'] . ')' : '')
);
echoLog(' - Sell Price: ' . $commodity['sellPrice']);
echoLog(' - Demand: ' . $commodity['demand'] . (
(array_key_exists('demandLevel', $commodity)) ? ' (' . $commodity['demandLevel'] . ')' : ''
));
echoLog(' - Demand: ' . $commodity['demand']
. ((array_key_exists('demandLevel', $commodity)) ? ' (' . $commodity['demandLevel'] . ')' : '')
);
}
// End example
}
@ -179,13 +210,16 @@ while (true)
unset($authorised, $excluded);
}
unset($converted);
echoLog('');
echoLog('');
}
}
catch (ZMQSocketException $e)
{
echoLog('');
echoLog('ZMQSocketException: ' . $e);
echoLog('');
sleep(10);
}
}

View File

@ -1,21 +1,207 @@
import zlib
import zmq.green as zmq
import simplejson
import sys
import sys, os, datetime, time
"""
" Configuration
"""
__relayEDDN = 'tcp://eddn-relay.elite-markets.net:9500'
__timeoutEDDN = 600000
# Set to False if you do not want verbose logging
__logVerboseFile = os.path.dirname(__file__) + '/Logs_Verbose_EDDN_%DATE%.htm'
#__logVerboseFile = False
# Set to False if you do not want JSON logging
__logJSONFile = os.path.dirname(__file__) + '/Logs_JSON_EDDN_%DATE%.log'
#__logJSONFile = False
# A sample list of authorised softwares
__authorisedSoftwares = [
"ED-TD.SPACE",
"EliteOCR",
"RegulatedNoise",
"RegulatedNoise__DJ",
"Maddavo's Market Share"
]
# Used this to excludes yourself for example has you don't want to handle your own messages ^^
__excludedSoftwares = [
'My Awesome Market Uploader'
]
"""
" Start
"""
def date(__format):
d = datetime.datetime.utcnow()
return d.strftime(__format)
__oldTime = False
def echoLog(__str):
global __oldTime, __logVerboseFile
if __logVerboseFile != False:
__logVerboseFileParsed = __logVerboseFile.replace('%DATE%', str(date('%Y-%m-%d')))
if __logVerboseFile != False and not os.path.exists(__logVerboseFileParsed):
f = open(__logVerboseFileParsed, 'w')
f.write('<style type="text/css">html { white-space: pre; font-family: Courier New,Courier,Lucida Sans Typewriter,Lucida Typewriter,monospace; }</style>')
f.close()
if (__oldTime == False) or (__oldTime != date('%H:%M:%S')):
__oldTime = date('%H:%M:%S')
__str = str(__oldTime) + ' | ' + str(__str)
else:
__str = ' ' + ' | ' + str(__str)
print __str
sys.stdout.flush()
if __logVerboseFile != False:
f = open(__logVerboseFileParsed, 'a')
f.write(__str + '\n')
f.close()
def echoLogJSON(__json):
global __logJSONFile
if __logJSONFile != False:
__logJSONFileParsed = __logJSONFile.replace('%DATE%', str(date('%Y-%m-%d')))
f = open(__logJSONFileParsed, 'a')
f.write(str(__json) + '\n')
f.close()
def main():
context = zmq.Context()
subscriber = context.socket(zmq.SUB)
echoLog('Starting EDDN Subscriber')
echoLog('')
context = zmq.Context()
subscriber = context.socket(zmq.SUB)
subscriber.setsockopt(zmq.SUBSCRIBE, "")
subscriber.connect('tcp://eddn-relay.elite-markets.net:9500')
subscriber.setsockopt(zmq.RCVTIMEO, __timeoutEDDN)
while True:
market_json = zlib.decompress(subscriber.recv())
market_data = simplejson.loads(market_json)
print market_data
sys.stdout.flush()
try:
subscriber.connect(__relayEDDN)
while True:
__message = subscriber.recv()
if __message == False:
subscriber.disconnect(__relayEDDN)
break
__message = zlib.decompress(__message)
__json = simplejson.loads(__message)
__converted = False
# Handle commodity v1
if __json['$schemaRef'] == 'http://schemas.elite-markets.net/eddn/commodity/1':
echoLogJSON(__message)
echoLog('Receiving commodity-v1 message...');
echoLog(' - Converting to v2...');
__temp = {}
__temp['$schemaRef'] = 'http://schemas.elite-markets.net/eddn/commodity/2'
__temp['header'] = __json['header']
__temp['message'] = {}
__temp['message']['systemName'] = __json['message']['systemName']
__temp['message']['stationName'] = __json['message']['stationName']
__temp['message']['timestamp'] = __json['message']['timestamp']
__temp['message']['commodities'] = []
__commodity = {}
if 'itemName' in __json['message']:
__commodity['name'] = __json['message']['itemName']
if 'buyPrice' in __json['message']:
__commodity['buyPrice'] = __json['message']['buyPrice']
if 'stationStock' in __json['message']:
__commodity['supply'] = __json['message']['stationStock']
if 'supplyLevel' in __json['message']:
__commodity['supplyLevel'] = __json['message']['supplyLevel']
if 'sellPrice' in __json['message']:
__commodity['sellPrice'] = __json['message']['sellPrice']
if 'demand' in __json['message']:
__commodity['demand'] = __json['message']['demand']
if'demandLevel' in __json['message']:
__commodity['demandLevel'] = __json['message']['demandLevel']
__temp['message']['commodities'].append(__commodity)
__json = __temp
del __temp, __commodity
__converted = True
# Handle commodity v2
if __json['$schemaRef'] == 'http://schemas.elite-markets.net/eddn/commodity/2':
if __converted == False:
echoLogJSON(__message)
echoLog('Receiving commodity-v2 message...')
__authorised = False
__excluded = False
if __json['header']['softwareName'] in __authorisedSoftwares:
__authorised = True
if __json['header']['softwareName'] in __excludedSoftwares:
__excluded = True
echoLog(' - Software: ' + __json['header']['softwareName'] + ' / ' + __json['header']['softwareVersion'])
echoLog(' - ' + 'AUTHORISED' if (__authorised == True) else
('EXCLUDED' if (__excluded == True) else 'UNAUTHORISED')
)
if __authorised == True and __excluded == False:
# Do what you want with the data...
# Have fun !
# For example
echoLog(' - Timestamp: ' + __json['message']['timestamp'])
echoLog(' - System Name: ' + __json['message']['systemName'])
echoLog(' - Station Name: ' + __json['message']['stationName'])
for __commodity in __json['message']['commodities']:
echoLog(' - Name: ' + __commodity['name'])
echoLog(' - Buy Price: ' + str(__commodity['buyPrice']))
echoLog(' - Supply: ' + str(__commodity['supply'])
+ ((' (' + __commodity['supplyLevel'] + ')') if 'supplyLevel' in __commodity else '')
)
echoLog(' - Sell Price: ' + str(__commodity['sellPrice']))
echoLog(' - Demand: ' + str(__commodity['demand'])
+ ((' (' + __commodity['demandLevel'] + ')') if 'demandLevel' in __commodity else '')
)
# End example
del __authorised, __excluded
del __converted
echoLog('')
echoLog('')
except zmq.ZMQError, e:
echoLog('')
echoLog('ZMQSocketException: ' + str(e))
echoLog('')
time.sleep(10)
if __name__ == '__main__':
main()