Created
July 12, 2013 22:57
-
-
Save hakusaro/5988475 to your computer and use it in GitHub Desktop.
Rust kill tracker thing
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 express = require('express'); | |
var app = express(); | |
var http = require('http'); | |
var redis = require('redis'); | |
var async = require('async'); | |
var redis_client = redis.createClient(6379, "localhost"); | |
//var redis_client = redis.createClient(port, host, options) | |
var eventId = 0; | |
app.listen(3000); | |
app.get('/', function(req, res) { | |
var players; | |
var playerObjects = []; | |
var lock; | |
function getPlayers() { | |
redis_client.smembers('players', function(err, response) { | |
players = response; | |
lock = players.length; | |
for (var player in players) { | |
getPlayerKills(players[player]); | |
} | |
}); | |
} | |
function getPlayerKills(player) { | |
redis_client.hget(player, 'pvp', function(err, response) { | |
var ply = new Player(); | |
ply.name = player; | |
ply.pvpAmount = response; | |
playerObjects.push(ply); | |
lock--; | |
if (lock === 0) { | |
res.json(playerObjects.sort(function(a, b) { | |
return b.pvpAmount - a.pvpAmount; | |
})); | |
} | |
}); | |
} | |
getPlayers(); | |
}); | |
function Player() { | |
var name; | |
var pvpAmount; | |
} | |
app.get('/player/:name', function(req, res) { | |
var lock = 0; | |
var pvpKills = 0; | |
var pveKills = 0; | |
function getPvp() { | |
redis_client.hget(req.params.name, 'pvp', function(err, reply) { | |
pvpKills = reply; | |
lock++; | |
if (lock == 2) { | |
finish(); | |
} | |
}); | |
} | |
function getPve() { | |
redis_client.hget(req.params.name, 'pve', function(err, reply) { | |
pveKills = reply; | |
lock++; | |
if (lock == 2) { | |
finish(); | |
} | |
}); | |
} | |
getPvp(); | |
getPve(); | |
function finish() { | |
res.send("Player " + req.params.name + " has " + pvpKills + " player kills and " + pveKills + " environment/npc kills."); | |
} | |
}); | |
redis_client.get('master_id_lock', function(err, response) { | |
eventId = response; | |
console.log("Loaded eventId lock from database: " + eventId); | |
}); | |
setInterval(function() { | |
var rest_options = { | |
host: 'playrust.com', | |
port: 80, | |
path: '/api/events/fetch', | |
method: 'GET' | |
}; | |
var request = http.request(rest_options, function(response) { | |
var content = ""; | |
// Handle data chunks | |
response.on('data', function(chunk) { | |
content += chunk; | |
}); | |
response.on('end', function() { | |
var data = JSON.parse(content); | |
// console.log(data['status']); | |
var firstobject = false; | |
for (var key in data['result']) { | |
var event = data['result'][key]; | |
if (event['id'] < eventId) { | |
continue; | |
} | |
if (eventId === 0) { | |
continue; | |
} | |
if (!firstobject) { | |
firstobject = event; | |
} | |
lastobject = event; | |
if (event['type'] == "killpvp") { | |
console.log("Killer " + event['player1_name'] + " killed " + event['player2_name']); | |
redis_client.hincrby(event['player1_name'], "pvp", 1); | |
redis_client.sadd('players', event['player1_name']); | |
} | |
if (event['type'] == "killnpc") { | |
redis_client.hincrby(event['player1_name'], "pve", 1); | |
redis_client.sadd('players', event['player1_name']); | |
} | |
} | |
try { | |
eventId = firstobject['id']; | |
redis_client.set('master_id_lock', eventId); | |
} catch (e) { | |
console.log(e); | |
} | |
redis_client.save(); | |
}); | |
}); | |
// Report errors | |
request.on('error', function(error) { | |
console.log("Error while calling endpoint.", error); | |
}); | |
request.end(); | |
}, 5000); |
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
{ | |
"name": "rust-test", | |
"description": "", | |
"version": "0.0.1", | |
"private": true, | |
"dependencies": { | |
"express": "3.2.5", | |
"redis": "0.8.3", | |
"async": "0.2.9" | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment