Skip to content

Instantly share code, notes, and snippets.

@hakusaro
Created July 12, 2013 22:57
Show Gist options
  • Save hakusaro/5988475 to your computer and use it in GitHub Desktop.
Save hakusaro/5988475 to your computer and use it in GitHub Desktop.
Rust kill tracker thing
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);
{
"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