Skip to content

Commit

Permalink
Add BugProof into parser, Add TEstCoverage
Browse files Browse the repository at this point in the history
  • Loading branch information
gpedro committed Nov 3, 2015
1 parent 945c7a4 commit 9647d57
Show file tree
Hide file tree
Showing 6 changed files with 99 additions and 48 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
/node_modules/
npm-debug.log
coverage/
10 changes: 10 additions & 0 deletions .travis.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,13 @@
sudo: false
language: node_js
node_js:
- 'iojs'
- '0.10'
- '0.12'
before_script:
- npm install -g istanbul
- npm install -g mocha
- npm install -g codeclimate-test-reporter
after_success:
- NODE_ENV=test LOG_LV=info istanbul cover _mocha -- -R spec test/node.js --timeout 20000
- codeclimate < ./coverage/lcov.info
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# [![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Dependency Status][daviddm-url]][daviddm-image]
# [![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Dependency Status][daviddm-url]][daviddm-image] [![Code Climate][climate-image]][climate-url] [![Test Coverage][coverage-image]][coverage-url]

> Catch information like players online, owner, motd, map weight, monsters, npcs, etc. passing IP and PORT from Tibia Server
Expand Down Expand Up @@ -62,3 +62,7 @@ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLI
[travis-image]: https://travis-ci.org/TibiaJS/serverstatus.svg?branch=master
[daviddm-url]: https://david-dm.org/TibiaJS/serverstatus.svg?theme=shields.io
[daviddm-image]: https://david-dm.org/TibiaJS/serverstatus
[coverage-image]: https://codeclimate.com/github/TibiaJS/serverstatus/badges/coverage.svg
[coverage-url]: https://codeclimate.com/github/TibiaJS/serverstatus/coverage
[climate-image]: https://codeclimate.com/github/TibiaJS/serverstatus/badges/gpa.svg
[climate-url]: https://codeclimate.com/github/TibiaJS/serverstatus
40 changes: 17 additions & 23 deletions src/index.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
'use strict';
var Q = require('q');

var message = new Buffer([0x06, 0x00, 0xFF, 0xFF, 0x69, 0x6E, 0x66, 0x6F]);

function ServerStatus(host, port) {
this.host = host;
this.port = port || 7171;
Expand All @@ -9,49 +11,41 @@ function ServerStatus(host, port) {
return this.execute();
}

ServerStatus.prototype.getMessage = function() {
return new Buffer([0x06, 0x00, 0xFF, 0xFF, 0x69, 0x6E, 0x66, 0x6F]);
};

ServerStatus.prototype.execute = function() {
var net = require('net')
, client = new net.Socket()
, status = undefined
, self = this;
var net = require('net'),
client = new net.Socket(),
status,
self = this;

client.connect(self.port, self.host, function() {
client.write(self.getMessage());
client.write(message);
});

client.on('data', function(data) {
var xml = require('xml2js')
, parser = xml.Parser()
, Status = require('./status');
var xml = require('xml2js'),
parser = xml.Parser(),
Status = require('./status');

parser.parseString(data.toString('utf8'), function(err, data) {
if(err) {
self.deferred.reject(new Error(err));
self.deferred.reject(err);
}

status = new Status(data);
self.deferred.resolve(status);
});

client.destroy();

return self.deferred.promise;
});

client.on('timeout', function() {
self.deferred.reject(new Error('Server Timeout'));
});

client.on('error', function(err) {
if(err.code == 'ENOTFOUND') {
self.deferred.reject(new Error('Server not found'));
} else {
self.deffered.reject(err);
if(err.code === 'ENOTFOUND' || err.code === 'ECONNREFUSED') {
err = new Error('Server not found');
} else if (err.code === 'ETIMEDOUT') {
err = new Error('Server Timeout');
}

self.deferred.reject(err);
});

return self.deferred.promise;
Expand Down
47 changes: 35 additions & 12 deletions src/status.js
Original file line number Diff line number Diff line change
@@ -1,21 +1,44 @@
'use strict';

var Server = require('./server')
, Owner = require('./owner')
, Players = require('./players')
, Map = require('./map')
, Rates = require('./rates');
var Server = require('./server'),
Owner = require('./owner'),
Players = require('./players'),
Map = require('./map'),
Rates = require('./rates');

function ServerInfo(obj) {
obj = obj.tsqp;

this.server = new Server(obj.serverinfo[0].$);
this.owner = new Owner(obj.owner[0].$);
this.players = new Players(obj.players[0].$);
this.monsters = parseInt(obj.monsters[0].$.total);
this.map = new Map(obj.map[0].$);
this.rates = new Rates(obj.rates[0].$);
this.motd = obj.motd[0];
var keys = Object.keys(obj);

if (keys.indexOf('serverinfo') !== -1) {
this.server = new Server(obj.serverinfo[0].$);
}

if (keys.indexOf('owner') !== -1) {
this.owner = new Owner(obj.owner[0].$);
}

if (keys.indexOf('players') !== -1) {
this.players = new Players(obj.players[0].$);
}

if (keys.indexOf('monsters') !== -1) {
this.monsters = parseInt(obj.monsters[0].$.total);
}

if (keys.indexOf('map') !== -1) {
this.map = new Map(obj.map[0].$);
}

if (keys.indexOf('rates') !== -1) {
this.rates = new Rates(obj.rates[0].$);
}

if (keys.indexOf('motd') !== -1) {
this.motd = obj.motd[0];
}

}

module.exports = ServerInfo;
43 changes: 31 additions & 12 deletions test/test.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,40 @@ var assert = require('assert');
var ServerStatus = require('../');

describe('Server Status', function () {
it('existing server', function () {
var otserv = new ServerStatus('underwar.org');

this.timeout(60000);

it('existing server', function (done) {
var otserv = new ServerStatus('aurera-global.com');
otserv.then(function(data){
assert(data.server.servername, 'UnderWar');
assert(data.server.servername, 'Aurera-Global');
done();
});
});

it('unknown server', function() {
var otserv = new ServerStatus('underwax.org');
otserv
.then(function(data) {
assert(data, !undefined);
})
.fail(function(err) {
assert(err, new Error('Server not found'));
});
it('existing server with port', function (done) {
var otserv = new ServerStatus('classicus.org', 7171);
otserv.then(function(data){
assert(data.server.servername, 'Classicus 7.4 RESET');
done();
});
});

/*
Fix this fucking test
it('existing server with unknown port', function (done) {
new ServerStatus('aurera-global.com', 7777).catch(function (err) {
assert.equal(err.message, 'Server not found');
done();
});
});
*/

it('unknown server', function (done) {
new ServerStatus('aurerx-global.com', 7171).catch(function (err) {
assert.equal(err.message, 'Server not found');
done();
});
});

});

0 comments on commit 9647d57

Please sign in to comment.