Skip to content

Instantly share code, notes, and snippets.

@CRamsan
Created April 11, 2016 16:56
Show Gist options
  • Save CRamsan/555c5a422cb65448b8e7f998481be0df to your computer and use it in GitHub Desktop.
Save CRamsan/555c5a422cb65448b8e7f998481be0df to your computer and use it in GitHub Desktop.
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