Created
April 11, 2016 16:56
-
-
Save CRamsan/555c5a422cb65448b8e7f998481be0df to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var WebSocket = require('ws'); | |
var http = require('https'); | |
var messageBeat = '{"action":"echo","payload":{"test":"test"},"service":"event"}'; | |
var messageRegister = '{"service":"event","action":"subscribe","worlds":["all"],"eventNames":["MetagameEvent"]}'; | |
var validEnviroments = ['ps2', 'ps2ps4us', 'ps2ps4eu']; | |
var DEBUG = false; | |
var world_list = [ | |
{ | |
'world_id': "19", | |
'state': "locked", | |
'name': { | |
'en': "Jaeger", | |
'de': "Jaeger", | |
'es': "Jaeger", | |
'fr': "Jaeger", | |
'it': "Jaeger", | |
'tr': "Jaeger" | |
} | |
}, | |
{ | |
'world_id': "25", | |
'state': "online", | |
'name': { | |
'en': "Briggs", | |
'de': "Briggs", | |
'es': "Briggs", | |
'fr': "Briggs", | |
'it': "Briggs", | |
'tr': "Briggs" | |
} | |
}, | |
{ | |
'world_id': "1", | |
'state': "online", | |
'name': { | |
'en': "Connery", | |
'de': "Connery", | |
'es': "Connery", | |
'fr': "Connery", | |
'it': "Connery", | |
'tr': "Connery" | |
} | |
}, | |
{ | |
'world_id': "10", | |
'state': "online", | |
'name': { | |
'en': "Miller", | |
'de': "Miller", | |
'es': "Miller", | |
'fr': "Miller", | |
'it': "Miller", | |
'tr': "Miller" | |
} | |
}, | |
{ | |
'world_id': "13", | |
'state': "online", | |
'name': { | |
'en': "Cobalt", | |
'de': "Cobalt", | |
'es': "Cobalt", | |
'fr': "Cobalt", | |
'it': "Cobalt", | |
'tr': "Cobalt" | |
} | |
}, | |
{ | |
'world_id': "17", | |
'state': "online", | |
'name': { | |
'en': "Emerald", | |
'de': "Smaragd", | |
'es': "Esmeralda", | |
'fr': "Emerald", | |
'it': "Smeraldo", | |
'tr': "Emerald" | |
} | |
}, | |
{ | |
'world_id': "2000", | |
'state': "online", | |
'name': { | |
'en': "Ceres", | |
'de': "Ceres", | |
'es': "Ceres", | |
'fr': "Ceres", | |
'it': "Ceres", | |
'tr': "Ceres" | |
} | |
}, | |
/*{ Servers removed | |
'world_id': "2001", | |
'state': "online", | |
'name': { | |
'en': "Lithcorp", | |
'de': "Lithcorp", | |
'es': "Lithcorp", | |
'fr': "Lithcorp", | |
'it': "Lithcorp", | |
'tr': "Lithcorp" | |
} | |
}, | |
{ | |
'world_id': "1001", | |
'state': "online", | |
'name': { | |
'en': "Palos", | |
'de': "Palos", | |
'es': "Palos", | |
'fr': "Palos", | |
'it': "Palos", | |
'tr': "Palos" | |
} | |
},*/ | |
{ | |
'world_id': "1000", | |
'state': "online", | |
'name': { | |
'en': "Genudine", | |
'de': "Genudine", | |
'es': "Genudine", | |
'fr': "Genudine", | |
'it': "Genudine", | |
'tr': "Genudine" | |
} | |
} | |
]; | |
var metagame_event_state_list = [ | |
{ | |
'metagame_event_state_id': "135", | |
'name': "started" | |
}, | |
{ | |
'metagame_event_state_id': "136", | |
'name': "restarted" | |
}, | |
{ | |
'metagame_event_state_id': "137", | |
'name': "canceled" | |
}, | |
{ | |
'metagame_event_state_id': "138", | |
'name': "ended" | |
}, | |
{ | |
'metagame_event_state_id': "139", | |
'name': "xp bonus changed" | |
} | |
]; | |
var metagame_event_list = [ | |
{ | |
"metagame_event_id": "1", | |
"name": { | |
"de": "Spüre die Hitze", | |
"en": "Feeling the Heat", | |
"es": "Siente el calor", | |
"fr": "Sentir la pression", | |
"it": "Sotto pressione", | |
"tr": "Sıcağı Hissetmek" | |
}, | |
"description": { | |
"de": "Erobere Indar innerhalb des Zeitlimits.", | |
"en": "Capture Indar", | |
"es": "Captura Indar sin pasarte del límite de tiempo", | |
"fr": "Capturer Indar dans la limite de temps", | |
"it": "Conquista Indar nei limiti di tempo", | |
"tr": "Zaman sınırı içinde Indar'ı Ele Geçir" | |
}, | |
"type": "1", | |
"experience_bonus": "30" | |
}, | |
{ | |
"metagame_event_id": "2", | |
"name": { | |
"de": "Kalter Krieg", | |
"en": "Cold War", | |
"es": "Guerra fría", | |
"fr": "Guerre froide", | |
"it": "Guerra fredda", | |
"tr": "Soğuk Savaş" | |
}, | |
"description": { | |
"de": "Erobere Esamir innerhalb des Zeitlimits.", | |
"en": "Capture Esamir", | |
"es": "Captura Esamir sin pasarte del límite de tiempo", | |
"fr": "Capturer Esamir dans la limite de temps", | |
"it": "Conquista Esamir nei limiti di tempo", | |
"tr": "Zaman sınırı içinde Esamir'i El Geçir" | |
}, | |
"type": "1", | |
"experience_bonus": "30" | |
}, | |
{ | |
"metagame_event_id": "3", | |
"name": { | |
"de": "Grün sehen", | |
"en": "Seeing Green", | |
"es": "Ver en verde", | |
"fr": "Voir vert", | |
"it": "Vedo verde", | |
"tr": "Yeşil Görme" | |
}, | |
"description": { | |
"de": "Erobere Amerish innerhalb des Zeitlimits.", | |
"en": "Capture Amerish", | |
"es": "Captura Amerish sin pasarte del límite de tiempo", | |
"fr": "Capturer Amerish dans la limite de temps", | |
"it": "Conquista Amerish nei limiti di tempo", | |
"tr": "Zaman sınırı içinde Amerish'i Ele Geçir" | |
}, | |
"type": "1", | |
"experience_bonus": "30" | |
}, | |
{ | |
"metagame_event_id": "4", | |
"name": { | |
"de": "Marsh Madness", | |
"en": "Marsh Madness", | |
"es": "Marsh Madness", | |
"fr": "Marsh Madness", | |
"it": "Marsh Madness", | |
"tr": "Marsh Madness" | |
}, | |
"description": { | |
"de": "Erobere Hossin innerhalb des Zeitlimits.", | |
"en": "Capture Hossin", | |
"es": "Captura Hossin sin pasarte del límite de tiempo", | |
"fr": "Capturer Hossin dans la limite de temps", | |
"it": "Conquista Hossin nei limiti di tempo", | |
"tr": "Capture Hossin within the time limit" | |
}, | |
"type": "1", | |
"experience_bonus": "30" | |
}, | |
{ | |
"metagame_event_id": "106", | |
"name": { | |
"de": "Eroberung", | |
"en": "Conquest", | |
"es": "Conquista", | |
"fr": "Conquête", | |
"it": "Conquista" | |
}, | |
"description": { | |
"de": "Erobere Basen und töte Feinde, um Punkte zu erhalten.", | |
"en": "Conquest alert", | |
"es": "Captura bases y acaba con los enemigos para conseguir puntos.", | |
"fr": "Capturez des bases et tuez des ennemis afin de remporter des points.", | |
"it": "Conquista le basi e uccidi i nemici per accumulare punti." | |
}, | |
"type": "6" | |
} | |
]; | |
function getServer(world_id, locale){ | |
for (var i = 0; i < world_list.length; i++) { | |
var world = world_list[i]; | |
if (world['world_id'] == world_id){ | |
if (typeof locale === 'undefined') { | |
return world['name']['en']; | |
} else { | |
return world['name'][locale]; | |
} | |
} | |
} | |
return "Unkown" | |
} | |
function getAlertName(metagame_event_id, locale){ | |
for (var i = 0; i < metagame_event_list.length; i++) { | |
var event = metagame_event_list[i]; | |
if (event['metagame_event_id'] == metagame_event_id){ | |
if (typeof locale === 'undefined') { | |
return event['description']['en']; | |
} else { | |
return event['description'][locale]; | |
} | |
} | |
} | |
return "Unkown" | |
} | |
function startBeating(ws) { | |
setInterval(function(){ ws.send(messageBeat); }, 6000); | |
} | |
function postNotification(enviroment, worldId, eventId) { | |
var channel = enviroment + "-" + worldId; | |
var message = getServer(worldId,'en') + ": " + getAlertName(eventId, 'en'); | |
var post_data = JSON.stringify({ | |
'channels': [channel], | |
'data': { | |
'alert': message, | |
'world_id' : worldId, | |
'event_id' : eventId | |
}}); | |
// An object of options to indicate where to post to | |
var post_options = { | |
host: 'api.parse.com', | |
port: '443', | |
path: '/1/push', | |
method: 'POST', | |
headers: { | |
'X-Parse-Application-Id': 'FmNucqCVW4DRhF3rdffeCsODLFemM3hMgDOz0LLs', | |
'X-Parse-REST-API-Key': '003YQK4yuwAmRdrDQgNGThENQw3JcUBaT3FPddK6', | |
'Content-Type': 'application/json' | |
} | |
}; | |
// Set up the request | |
var post_req = http.request(post_options, function(res) { | |
res.setEncoding('utf8'); | |
res.on('data', function (chunk) { | |
console.log('Response: ' + chunk); | |
}); | |
}); | |
//post the data | |
console.log(post_data); | |
post_req.write(post_data); | |
post_req.end(); | |
} | |
function startServer(enviroment) { | |
var ws = new WebSocket('wss://push.planetside2.com/streaming?service-id=s:PS2Link&environment=' + enviroment); | |
ws.on('open', function open() { | |
ws.send(messageRegister); | |
startBeating(ws); | |
}); | |
ws.on('message', function(jsonData, flags) { | |
var data = JSON.parse(jsonData); | |
if ('type' in data && data['type'] == "serviceMessage" ) { | |
var payload = data['payload']; | |
if ( typeof payload !== 'undefined' ) { | |
console.log(data); | |
if ('event_name' in payload && payload['event_name'] == "MetagameEvent" ) { | |
if ('metagame_event_state' in payload && | |
(payload['metagame_event_state'] == "135" || | |
payload['metagame_event_state'] == "136")) { | |
postNotification(enviroment, payload['world_id'], payload['metagame_event_id']) | |
} | |
} | |
} | |
} | |
}); | |
} | |
if (DEBUG){ | |
for (var k = 0; k < metagame_event_list.length; k++) { | |
postNotification("ps2", "17", metagame_event_list[k]['metagame_event_id']); | |
} | |
/*for (var i = 0; i < validEnviroments.length; i++) { | |
for (var j = 0; j < world_list.length; j++) { | |
for (var k = 0; k < metagame_event_list.length; k++) { | |
postNotification(validEnviroments[i], world_list[j]['world_id'], metagame_event_list[k]['metagame_event_id']); | |
} | |
} | |
}*/ | |
} else { | |
for (var i = 0; i < validEnviroments.length; i++) { | |
startServer(validEnviroments[i]); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment